__PRETTY_FUNCTION__
、__FUNCTION__
、__func__
和它们记录在哪里有什么区别?如何决定使用哪一个?
最佳答案:
__func__
是一个隐式声明的标识符,当函数在函数内部使用时,该标识符扩展为包含函数名的字符数组变量。它在C99中被添加到C中。从C99?6.4.2.2/1:
标识符__func__
由转换程序隐式声明,就像紧跟在每个函数定义的左大括号之后,声明
static const char __func__[] = "function-name";
出现,其中函数名是词汇封闭函数的名称。此名称是函数的未命名名称。
注意,它不是宏,在预处理期间没有特殊意义。
在C++ 11中,将C~(++)添加到C++中,将其指定为包含“实现DE-EnEd字符串”(C++ 11 11)[4.4.1[DCL .fCT.DEF.GUE]/8 ],这与C.规范中不太有用。
__func__
是一些C编译器支持的标准扩展(包括GCC和VisualC++);一般来说,如果使用的是不支持它的编译器(例如VisualC++),它不支持C99,并且还不支持,则应该使用__func__
支持的地方,只使用__FUNCTION__
。C++0x的LL,不提供__func__
。__FUNCTION__
是一个GCC扩展,它与__func__
基本相同,除了C++函数,它包含函数的“漂亮”名称,包括函数的签名。VisualC++有类似的(但不完全相同)扩展,__PRETTY_FUNCTION__
。对于非标准宏,您需要查阅编译器的文档。VisualC++扩展包含在C++编译器的“AA>”的MSDN文档中。GCC文件扩展见GCC文件页N1642