__FILE__
和__LINE__
众所周知。自C99以来有一个__func__
。
#include <iostream>
struct Foo {
void Do(){ std::cout << __func__ << std::endl; }
};
int main()
{
std::cout << __func__ << std::endl;
Foo foo; foo.Do();
return 0;
}
将输出
main
Do
是否有任何宏/关键字可以输出方法名称,如Foo::Do
?
答案 0 :(得分:78)
Boost有一个名为BOOST_CURRENT_FUNCTION的特殊实用程序宏,它隐藏了编译器实现之间的差异。
在实现之后,我们看到有几个宏取决于编译器:
__PRETTY_FUNCTION__
- GCC,MetroWerks,Digital Mars,ICC,MinGW __FUNCSIG__
- MSVC __FUNCTION__
- 英特尔和IBM __FUNC__
- Borland __func__
- ANSI C99 答案 1 :(得分:8)
__FUNCTION__
和
__PRETTY_FUNCTION__
。__FUNCSIG__
和__FUNCTION__
。答案 2 :(得分:3)
标准C ++中没有这样的宏,包括我看过的草案C ++ 0x标准。它会使编译变得复杂,因为在预处理之后进行解析(确定函数是必需的),并且我怀疑这就是标准中没有任何内容的原因。
你使用的__func__
是非标准的,虽然它显然适用于你的编译器。
答案 3 :(得分:1)
不在标准C ++中(并且__func__
不是C ++的一部分)。您的实现可能有这样的功能 - 您正在使用哪个编译器?
答案 4 :(得分:1)
有关MS Visual Studio支持的完整列表,请参阅“Predefined Macros (C/C++)”。
答案 5 :(得分:0)
这可能有用:
http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html
#include"stdio.h"
#include"stdlib.h"
int main()
{
printf("line number is %d .. func name is %s, file name is %s",__LINE__,__PRETTY_FUNCTION__,__FILE__);
return 0;
}
这是如何在gcc中打印行号,函数名和文件名。