我想知道如何判断特定编译器是否支持预处理器宏__PRETTY_FUNCTION__
(因为该宏是非标准的)。我应该如何在头文件中检查这个呢?我的目的是这样的:
#ifndef __PRETTY_FUNCTION__
#define __PRETTY_FUNCTION__ __func__
#endif
但是,我猜想预处理器会为每个函数定义宏,所以我想知道在函数外部是否有任何意义使用__PRETTY_FUNCTION__
(不像__FILE__
或__LINE__
)。这是真的吗?如果不是,我该如何检查呢?
编辑:我尝试了一下。在函数外部,__PRETTY_FUNCTION__
未定义(我没有在类内部检查)。因此必须有另一种方法。
编辑2:实际上,一个简单的hack方法是这样做:)
void Dummy()
{
#ifndef __PRETTY_FUNCTION__
#define __PRETTY_FUNCTION__ __func__
#endif
}
另一种方法是检查编译器,正如其他人建议的那样。
#IFDEF
。我真的不明白您所说的“预处理器为每个函数定义了该宏”的含义-您能否重新表述一下,我们可以尝试帮助您。 - Mawg says reinstate Monica