有预处理器宏定义其中的函数名称,g {+ {1}}和cl __func__
。 ( func 是执行此操作的c ++标准方法(来自dcl.fct.def.general),但它并未在任何地方实现)
对于将由这两个编译器编译的源,我该怎么办?
我试过了
__FUNCTION__
但由于它不在函数中,因此未定义宏。
我也试过
#ifdef __func__
#define FUNCTION_NAME __func__
#else
#ifdef __FUNCTION__
#define FUNCTION_NAME __FUNCTION__
#else
#error "Function name macro not found"
#endif
#endif
但这也会出错。
我该怎么做才能在多个编译器中工作?
答案 0 :(得分:3)
我发现有一个提升宏,BOOST_CURRENT_FUNCTION。
通过查看源代码here如何实现它是如何使用内联函数的。
inline void current_function_helper()
{
#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) || defined(__ghs__) || defined(__DMC__)`
...
(它也在名为detail的名称空间中声明,非常明智)
我会用这个。
编辑:实现__func__现在将在Visual Studio客户技术预览中,请参阅here。