Chinaunix首页 | 论坛 | 博客
  • 博客访问: 631152
  • 博文数量: 87
  • 博客积分: 3399
  • 博客等级: 中校
  • 技术积分: 1422
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-17 21:20
文章分类

全部博文(87)

文章存档

2013年(1)

2012年(51)

2011年(33)

2010年(2)

分类: C/C++

2012-02-11 20:26:05

__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标准的版本号,形如:yyyymmLyyyymm分别标示版本的年和月。

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

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

 

 

参考资料

 

更多关于C VC GCC的宏定义说明

一篇收集了很多很杂的宏及预定义指令的文

阅读(1482) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~