#define
来自cppreference.com
< cpp | preprocessor
语法:
#define 宏名称 替代字符串
- define命令对整个文件产生替换效果,也就是说,编译器遍历所整个文件,所有"宏名称"都被替换为"替代字符串"。"替代字符串"以换行符结束。
这里#define的一个典型的应用(至少在C语言中):
#define TRUE 1 #define FALSE 0 ... int done = 0; while( done != TRUE ) { ... }
- define命令的另一个特性就是它可以使用参数,这使它作为一个伪函数生成器更加强大,请看下边的代码:
#define absolute_value( x ) ( ((x) < 0) ? -(x) : (x) ) ... int num = -1; while( absolute_value( num ) ) { ... }
在复杂的宏定义中充分使用括号是一个非常明智的选择,请注意上边的这个例子,变量“x”总是出现在只包含他自己的括号中,所以,在和0比较之前,或者乘-1之前,他会被正确的计算。另外,为了防止被其他代码影响,整个宏也包含在括号之中。如果你不认真对待的话,就会有代码被编译器错误编译的风险。这里有一个使用#define命令生成通用递增loop循环语句的例子,循环中打印出整数型的1到20。
#define count_up( v, low, high ) \ for( (v) = (low); (v) <= (high); (v)++ ) ... int i; count_up( i, 1, 20 ) { printf( "i is %d\n", i ); }
相关主题: # and ##, #if,...,#endif, #undef