1、简单替换(object-like 宏) #define N 42 N // -> 42 2、带参数的宏( function-like宏) #define ADD(x, y) x + y ADD(1,2) // -> 1 +2 标准定义格式如下 // obj-like #define 宏名 替换列表 换行符 //func-like #define 宏名 ([标识符列表]) 替换列表 换行符 3、宏定义以换行符...
C语言换行 1、#define的宏 宏定义是以“\”换行,如: #define MAX(a,b) \ ((a) <(b) ? (b) : (a)) #define SKIP_TARGET\ while(isspace(*p)) ++p;\ while(!isspace(*p)) ++p; #define SKIP_ELEMENT\ while(*p!=':') ++p;\ ++p;\ while(isspace(*p)) ++p;\ while(*p && !isspac...
在宏定义中可以使用 \ 换行符将多行代码合并为一行。例如:在上述代码中,我们定义了一个宏定义 PRINTXY,它用于输出 x 和 y 的值。在 PRINTXY 宏定义中,我们使用了 \ 换行符将两个 printf 语句合并为一行。在 main 函数中,我们调用 PRINTXY 宏定义输出 x 和 y 的值。宏定义中的递归调用 宏定义也可以...
宏定义以换行结束,不需要分号等符号作分隔符。如有以下定定义: # define PI 3.1415926;原希望用PI求圆的周长的语句 c2*PI*r;经宏展开后,变成 c2*3.1415926*r;这就不能达到希望的要求。 带参数宏定义进一步扩充了无参数宏定义的能力,在字符序列替换同时还能进行参数替换。带参数定定义的一般形式为 # define ...
define的多行定义 define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心) #define MACRO(arg1, arg2) do { \ /* declarations */ \ stmt1; \ stmt2; \ /* ... */ \ } while(0) /* (no trailing ; ) */ 关键是要在每一个换行的时候加上一个 "\ " ...
宏定义的换行连接 标准预处理宏 宏(macro)是基于#define所实现的另一种预处理功能。 与基本的#define定义的是常量相比,宏(macro)允许多个参数化替换,参数中可以是固定的字符串,也被一些变量所替代。这个替换的操作将在预编译的时候完成。 宏(macro)的作用是用比较简单的方式表示复杂的函数调用,以提高程序的可读性...
示例如下:我们定义一个LED_Ctrl的功能 #define LED_Ctrl #ifdef LED_Ctrl IoHwAb_Led_Ctrl(Led0,STD_ON); ... #endif 通过定义和取消定义该宏定义,即可实现该功能是否启用,在项目前期调试过程中,会经常用到。量产交付时,应尽可能减少该类宏定义。 参数定义 通过宏定义替换参数,可以实现在多个地方使用同一...
// 在函数内定义一个 va_list 类型变量,该类型在 stdarg.h 头文件中定义。 va_list valist; double sum = 0.0; int i; // 调用 va_start 宏,初始化 va_list 变量为一个参数列表。宏 va_start 在 stdarg.h 头文件中定义。 va_start(valist, num); ...
1、区分不同情况,有多种方式可以采用。不管是哪种情况,都可以用\结尾作为换行标记,在编译时,\后面的换行符将被忽略,当做一行处理。比如宏定义时使用#define my_puts(x) printf("%s", \ x);和写作#define my_puts(x) printf("%s",x);是没区别的。 这里的\必须存在,不能省略。2、不过...