第 16 章 C 预处理器和 C 库(预定义宏)

图片 1图片 2

__DATE__

 1 /*-------------------------------------
 2     predef.c -- 预定义宏和预定义标识符
 3 -------------------------------------*/
 4 
 5 #include <stdio.h>
 6 
 7 void why_me(void);
 8 
 9 int main()
10 {
11     printf("The file is %s.\n", __FILE__);
12     printf("The data is %s.\n", __DATE__);
13     printf("The time is %s.\n", __TIME__);
14     //printf("The version is %ld.\n", __STDC__);
15     printf("This is line %d.\n", __LINE__);
16     printf("This function is %s\n", __FUNCTION__);
17     
18     why_me();
19 
20     return 0;
21 }
22 
23 void why_me()
24 {
25     printf("This function is %s\n", __FUNCTION__);
26     printf("This is line %d.\n", __LINE__);
27 }

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

predef.c

如若GCC无法确定当前日期,则每次编译时来警告,__DATE__表示成”??? ??
????”。

图片 3

__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

http://www.bkjia.com/Cyy/492023.htmlwww.bkjia.comtruehttp://www.bkjia.com/Cyy/492023.htmlTechArticle\_\_DATE\_\_
字符串常量,标示预处理器执行的日期,包含11只字符例如:Feb 12 1996
,如果日期小于10,前面补充空格。 如果GCC无法确定当前日期…

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图