跨编译器工作的函数名宏

时间:2013-11-27 14:12:05

标签: c-preprocessor

有预处理器宏定义其中的函数名称,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

但这也会出错。

我该怎么做才能在多个编译器中工作?

1 个答案:

答案 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