常规宏

这些预定义宏始终由编译器预定义。 除非另有说明,否则所有这些宏都受保护,这意味着如果您尝试取消定义或重新定义它们,那么编译器将发出警告。

表 1. 常规预定义宏
预定义宏名称 描述 预定义值
__BASE_FILE__ 指示主源文件的名称。 主源文件的标准文件名。
__COUNTER__ 展开为从 0 开始的整数。 每次扩展此宏时,该值都会增加 1。

您可以将此宏与 ## 运算符配合使用,以生成唯一的变量或函数名。 以下示例显示了具有单个令牌的不同标识的声明:

#define CONCAT(a, b) a##b
#define CONCAT_VAR(a, b) CONCAT(a, b)
#define VAR CONCAT_VAR(var, __COUNTER__)

//Equivalent to int var0 = 1;
int VAR = 1; 

//Equivalent to char var1 = 'a'; 
char VAR = 'a'; 
从 0 开始的整数变量。 每次扩展此宏时,该值都会增加 1。
__DATE__ 指示预处理源文件的日期。 包含预处理源文件的日期的字符串。
__FILE__ 指示预处理源文件的名称。 包含预处理源文件的名称的字符串。
__function__ 指示当前正在编译的函数的名称。 包含当前正在编译的函数的名称的字符串。
__LINE__ 指示源文件中的当前行号。 包含源文件中的行号的整数常量。
仅限 C__SIZE_TYPE__ 指示当前平台上 size_t 的底层类型。 不受保护。 unsigned int 处于 32 位 编译方式, unsigned long 处于 64 位编译方式。
__TIME__ 指示预处理源文件的时间。 包含预处理源文件的时间的字符串。
__TIMESTAMP__ 指出源文件最近修改的日期和时间。 当编译器处理作为源程序一部分的任何包含文件时,该值将更改。 格式为 "Day Mmm dd hh:mm:ss yyyy" 的字符串文字,其中:
表示星期几 (MonTueWedThuFriSatSun)。
Mmm
以缩写形式 (JanFebMarAprMayJunJulAugSepOctNovDec) 表示月份。
dd
表示日期。 如果日期小于 10 ,那么第一个 d 是空白字符。
小时
表示小时。
毫米
表示分钟。
SS
表示秒数。
yyyy
表示年份。