在非GCC编译器中使用__FUNCTION __,__ PRETTY_FUNCTION__

时间:2017-03-13 08:01:07

标签: c++ windows unix

我在代码中使用__FUNCTION____PRETTY_FUNCTION__宏,并了解到代码需要在GCC以外的编译器下编译。这些宏是标准的一部分吗?或GCC扩展?我应该使用__func__吗?

2 个答案:

答案 0 :(得分:2)

  • __FUNCTION__几乎可以在任何地方使用,但它只是一个简单的函数名称
  • __PRETTY_FUNCTION__与GCC兼容的编译器,如GCC,Clang和英特尔的编译器,甚至包括Sun Studio 12等编译器。
  • 注意,__func__不是宏
  • Visual Studio C ++编译器有__FUNCSIG__(您可能想要这个)和__FUNCDNAME__(因为它是完整的装饰名称而不太有用)

答案 1 :(得分:1)

  

这些宏是标准的一部分吗?

没有

  

我应该使用__func__吗?

__func__是标准的(并非宏)。如果编译器不支持其他编译器,则可以回退到此 - 只要编译器支持最新标准。在较旧的编译器上,您必须使用特定于编译器的宏。

请注意,不同的宏可能提供超出函数名称的不同级别的信息。 __PRETTY_FUNCTION__特别提供了有用的附加信息(名称空间限定,完整签名,模板参数)。

如果您想要编译器必须提供的最漂亮的函数名称(如果有的话),您需要使用预定义的宏检测编译器并研究每个编译器版本支持的内容。或者,如果您不想重新实施其他人已经为您完成的工作,您可以使用BOOST_CURRENT_FUNCTION