#define

来自cppreference.com


语法:

    #define 宏名称 替代字符串
  1. define命令对整个文件产生替换效果,也就是说,编译器遍历所整个文件,所有"宏名称"都被替换为"替代字符串"。"替代字符串"以换行符结束。

这里#define的一个典型的应用(至少在C语言中):

     #define TRUE 1
     #define FALSE 0
     ...
     int done = 0;
     while( done != TRUE ) {
        ...
     }
  1. 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