在标准C以及各中编译器中定义了一些对象宏, 这些宏的名称以"__"开头和结尾, 并且都是大写字符. 这些预定义宏可以被#undef, 也可以被重定义。
在ANSI C标准中定义了__FILE__,LINE,DATA,TIME,__STDC__等标准的预定义宏。GCC对其进行扩展,也定义了多个预定义宏。
概括起来GCC中可使用的预定义宏涵盖了如下几方面的信息:
1、宿主的信息:GNU的版本,编译器的版本,类型的相关信息,字节序信息等。
2、编译动作的信息:编译的日期、时间;编译时是否进行了时间或空间上的优化;定义的inline是否被编译器执行等。
3、文件的信息:文件名称、函数名称、行数信息、文件最后修改时间等等。
4、计数信息:COUNTER,_INCLUDE_LEVEL_等。
ANSI C标准中有几个标准预定义宏:
FILE DATE TIME LINE 等
LINE:在源代码中插入当前源代码行号;
FILE:在源文件中插入当前源文件名;
DATE:在源文件中插入当前的编译日期
TIME:在源文件中插入当前编译时间;
STDC:当要求程序严格遵循ANSI C标准时该标识被赋值为1;
__cplusplus:当编写C++程序时该标识符被定义。
参考文献:
[1] https://blog.csdn.net/hgl868/article/details/7058906