码迷,mamicode.com
首页 > 其他好文 > 详细

__FILE__,__LINE__,__FUNCTION__的问题

时间:2016-04-25 15:19:27      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:function   file   return   

#define MYCODE __FILE__,__LINE__,__FUNCTION__
#define MYCODE2 mycall(__FILE__,__LINE__,__FUNCTION__);

void mycall(char* file=__FILE__,int line=__LINE__,const char* function=__FUNCTION__)
{
 printf("%s:%d %s\n",file,line,function);
 printf("%s:%d %s\n",__FILE__,__LINE__,__FUNCTION__);
}

int main()
{
 mycall(__FILE__,__LINE__,__FUNCTION__);
 mycall();
 mycall(MYCODE);
 MYCODE2
 return 0;
}

打印结果:

/root/code/testexe/src/testexe.cpp:380 main
/root/code/testexe/src/testexe.cpp:375 mycall
/root/code/testexe/src/testexe.cpp:372 
/root/code/testexe/src/testexe.cpp:375 mycall
/root/code/testexe/src/testexe.cpp:382 main
/root/code/testexe/src/testexe.cpp:375 mycall
/root/code/testexe/src/testexe.cpp:383 main
/root/code/testexe/src/testexe.cpp:375 mycall

可见,作为默认参数,只是函数声明的文件和行数,没有函数名。
作为宏定义的话,不是宏定义申明的位置,而是实际调用的位置。

 

ANSI标准说明了五个预定义的宏名。它们是:
__LINE__
__FILE__
__DATE__
__TIME__
__STDC__
C++中还定义了 __cplusplus

如果编译器不是标准的,则可能仅支持以上宏名中的几个,或根本不支持。记住编译程序也许还提供其它预定义的宏名。

__LINE__ 及 __FILE__ 宏指示,#line指令可以改变它的值,简单的讲,编译时,它们包含程序的当前行数和文件名。

__DATE__ 宏指令含有形式为月/日/年的串,表示源文件被翻译到代码时的日期。
__TIME__ 宏指令包含程序编译的时间。时间用字符串表示,其形式为: 分:秒
__STDC__ 宏指令的意义是编译时定义的。一般来讲,如果__STDC__已经定义,编译器将仅接受不包含任何非标准扩展的标准C/C++代码。如果实现是标准的,则宏__STDC__含有十进制常量1。如果它含有任何其它数,则实现是非标准的。
__cplusplus 与标准c++一致的编译器把它定义为一个包含至少6为的数值。与标准c++不一致的编译器将使用具有5位或更少的数值。


本文出自 “飞翔正义的博客” 博客,请务必保留此出处http://xzq2000.blog.51cto.com/2487359/1767397

__FILE__,__LINE__,__FUNCTION__的问题

标签:function   file   return   

原文地址:http://xzq2000.blog.51cto.com/2487359/1767397

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!