欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C预定义宏

程序员文章站 2023-01-13 08:38:23
__date__ 字符串常量,标示预处理器执行的日期,包含11个字符例如:“feb 12 1996 ”,如果日期小于10,前面补充空格。 如果gcc无法...

__date__

字符串常量,标示预处理器执行的日期,包含11个字符例如:“feb 12 1996 ”,如果日期小于10,前面补充空格。

如果gcc无法确定当前日期,则每次编译时产生警告,__date__表示成”??? ?? ????”。

__time__

字符串常量,标示预处理执行的时间,包含8个字符,例如:“23:59:01”。

如果gcc无法确定当前时间,则每次编译时产生警告,__date__表示成”??:??:??”。

__file__

c串常量,当前文件,包含详细路径,例如:“/usr/local/include/leo.c”

__line__

十进制整数常量,标示当前行号。

 

__file__ 和__line__在生成报告程序错误的信息时非常有用,可以标示异常产生的文件、行号。

an #include directive changes the expansions of __file__ and __line__ to correspond to the included file. at the end of that file, when processing resumes on the input file that contained the #include directive, the expansions of __file__ and __line__ revert to the values they had before the #include (but __line__ is then incremented by one as processing moves to the line after the #include).

#line 指令也会改变__file__和__line__的值。

__func__

字符串,标示当前所在函数名,c99 引入。

__funciton__

同__func__,gcc引入。

__func__和__funciton__都不是宏,预处理器并不知道当前所在函数的名称,然而它和__file__、__line__一样可以用于程序调试和异常信息报告。

__stdc__

其值为1,则表示编译器遵循iso standard c。如果编译器使用gnu cpp 而不是gcc则不是如此。除非使用了-tradional-cpp 选项,否则预处理器总是遵循标准。

使用-tradional-cpp 选项时,此宏不被定义。

有些机器上,遵循标准c时,它被定义为1,而不遵循标准时为0,所以最好使用#if __stdc__,

而不要使用#ifdef __stdc__.

__stdc__version__

长整型常量,标示编译器所遵循的c标准的版本号,形如:yyyymml,yyyy和mm分别标示版本的年和月。

除非gnu cpp 使用gcc,否则其实现并不需要很准确,如199409l表示1994年修订过的1989c,也是当前默认支持的。199901l表示1999c,目前并不能完全支持1999c。

如果使用了-tradional-cpp 或者编译c++或者objective-c 时,此宏不被定义。

 

摘自 sdtarena