之前只知道define可以用来相当于一个inline函数(define f(x,y)x+y)以及变量替换(define MAX 100000),今天又在逛gcc的include时看到这个,不过用法是

#define __need_error_t

与我之前了解的完全不同,这里是用来定义了一个有意义的常量,与一般与其他文件中的ifdefine 或ifndefine配合使用。

如在a.h中#define __debug_status

在b.c c.c等文件中可以有:

      #ifdefine __debug_status

                     //debug

    #endif

这样规定了一组debug动作,当a.h中有这句时执行。这样在调试时这样做,在正式版本中删去a.h中的那句#define __debug_status,之后的调试指令不会执行。

这样做的一个好处是 宏定义是预处理的,不会带入编译中,不像if 这样的分支指令总是生成指令。所以如果删去a.h中的宏,在编译时不会引入任何debug相关的操作指令,提高性能。