ANSIC标准定义的6种预定义宏

From: http://biancheng.dnbcw.info/c/277439.html

ANSIC标准定义了以下6种可供C语言使用的预定义宏:   
       __LINE__                        在源代码中插入当前源代码行号   
       __FILE__                        在源代码中插入当前源代码文件名   
       __DATE__                        在源代码中插入当前编译日期〔注意和当前系统日期区别开来〕   
       __TIME__                        在源代码中插入当前编译时间〔注意和当前系统时间区别开来〕         
       __STDC__                        当要求程序严格遵循ANSIC标准时该标识符被赋值为1。   
       __cplusplus   
   标识符__LINE__和__FILE__通常用来调试程序;   
   标识符__DATE__和__TIME__通常用来在编译后的程序中加入一个时间标志,以区分程序的不同版本;

这四个都是预编译宏,不是包含在头文件中的
__FILE__是当前编译的文件的文件名 是一个字符串
__TIME__是当前编译的文件的编译时间 格式是hh:mm:ss 是字符串
__DATE__是当前编译的文件的编译日期 格式是Mmm:dd:yyyy 是字符串
__LINE__是调用该宏语句所在的行数,是个十进制数


用在宏定义中

譬如:
#define TEST (__FILE__" "__TIME__) /*这个括号没有也行的*/
int main(void)
{
printf(TEST);
return 0;
}
假如该代码的文件名叫console.cpp
那么会输出文件名加编译时间
.\console.cpp 21:34:22


==========================================

C程序:

[cpp] view plain copy print ?
  1. #include <stdio.h>  
  2.   
  3. int main()  
  4. {  
  5.     char s1[] = __DATE__;  
  6.     char s2[] = __TIME__;  
  7.   
  8.     printf("s1=[%s]\n", s1);  
  9.     printf("s2=[%s]\n", s2);  
  10.   
  11.     return 0;  
  12. }  

编译运行结果:

[plain] view plain copy print ?
  1. [zcm@c #6]$cat -v a.c  
  2. #include <stdio.h>  
  3.   
  4. int main()  
  5. {  
  6.         char s1[] = __DATE__;  
  7.         char s2[] = __TIME__;  
  8.   
  9.         printf("s1=[%s]\n", s1);  
  10.         printf("s2=[%s]\n", s2);  
  11.   
  12.         return 0;  
  13. }  
  14. [zcm@c #7]$make  
  15. gcc  -o a a.c  
  16. [zcm@c #8]$./a  
  17. s1=[Apr 24 2014]  
  18. s2=[17:21:26]  
  19. [zcm@c #9]$./a  
  20. s1=[Apr 24 2014]  
  21. s2=[17:21:26]  
  22. [zcm@c #11]$./a  
  23. s1=[Apr 24 2014]  
  24. s2=[17:21:26]  

可见,每次程序运行时,输出的都是同一个时间,即编译时间!

你可能感兴趣的:(ANSIC标准定义的6种预定义宏)