可以用来打印方法名称的macros/关键字?

__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 

有没有任何macros/关键字会输出方法名称,如Foo::Do

Boost具有一个名为BOOST_CURRENT_FUNCTION的特殊实用macros,它隐藏了编译器实现之间的差异。

在实现之后,我们看到有几个macros取决于编译器:

  • __PRETTY_FUNCTION__ – GCC,MetroWerks,数字火星,ICC,MinGW
  • __FUNCSIG__ – MSVC
  • __FUNCTION__ – 英特尔和IBM
  • __FUNC__ – Borland
  • __func__ – ANSI C99
  • 在GCC上,你可以使用__FUNCTION____PRETTY_FUNCTION__
  • 在MSVC上,你可以使用__FUNCSIG____FUNCTION__

在标准的C ++中没有这样的macros,包括我看过的C ++ 0x标准草案。 这会使编译复杂化,因为parsing(必须确定一个函数是什么)预处理后,我怀疑这就是为什么标准中没有什么。

你使用的__func__是非标准的,尽pipe它显然在你的编译器上工作。

不在标准C ++中(而且__func__不是C ++的一部分)。 你的实现可能有这样的function,但是你正在使用哪种编译器?

有关MS Visual Studio支持的完整列表,请参阅“ 预定义的macros(C / C ++) ”。

这可能是有用的:

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中打印行号,函数名和文件名。