在GNUC编译器环境下,有一些比较方便的宏,例如:
- __FILE__: 当前源文件名称
- __FUNCTION__: 当前函数名称
- __LINE__: 当前行号
- __TIME__: 编译时间
- __DATE__: 编译日期
其中__DATE__字符串格式是混合形式
例如 2022-07-03 会输出为 Jul 3 2022
这种形式不太方便阅读,一般会习惯转换为 2022-07-03 这种格式,可以使用以下宏来进行转换,这样转换在编译器就已经转换完成,不会引入执行问题
#define YEAR ((((__DATE__ [7] - '0') * 10 + (__DATE__ [8] - '0')) * 10 \
+ (__DATE__ [9] - '0')) * 10 + (__DATE__ [10] - '0'))
#define MONTH ((__DATE__ [0] == 'J' && __DATE__ [1] == 'a' && __DATE__ [2] == 'n') ? 1 \
: (__DATE__ [0] == 'F' && __DATE__ [1] == 'e' && __DATE__ [2] == 'b') ? 2 \
: (__DATE__ [0] == 'M' && __DATE__ [1] == 'a' && __DATE__ [2] == 'r') ? 3 \
: (__DATE__ [0] == 'A' && __DATE__ [1] == 'p' && __DATE__ [2] == 'r') ? 4 \
: (__DATE__ [0] == 'M' && __DATE__ [1] == 'a' && __DATE__ [2] == 'y') ? 5 \
: (__DATE__ [0] == 'J' && __DATE__ [1] == 'u' && __DATE__ [2] == 'n') ? 6 \
: (__DATE__ [0] == 'J' && __DATE__ [1] == 'u' && __DATE__ [2] == 'l') ? 7 \
: (__DATE__ [0] == 'A' && __DATE__ [1] == 'u' && __DATE__ [2] == 'g') ? 8 \
: (__DATE__ [0] == 'S' && __DATE__ [1] == 'e' && __DATE__ [2] == 'p') ? 9 \
: (__DATE__ [0] == 'O' && __DATE__ [1] == 'c' && __DATE__ [2] == 't') ? 10 \
: (__DATE__ [0] == 'N' && __DATE__ [1] == 'o' && __DATE__ [2] == 'v') ? 11 : 12)
#define DAY ((__DATE__ [4] == ' ' ? 0 : __DATE__ [4] - '0') * 10 \
+ (__DATE__ [5] - '0'))