是否有可能在gcc 3.3+中使用__func__? (C ++)

时间:2009-08-27 09:48:15

标签: c++ gcc

使用3.3之前的gcc版本和MS编译器,我使用以下宏:

DEBUG_WARNING(...) printf(">WARNING: "__FUNCTION__"() " __VA_ARGS__);

使用:

DEBUG_WARNING("someFunction returned %d", ret); 

输出:

>WARNING: Class::FunctionName() someFunction returned -1

当我们拥有大量系统时,它非常方便,都发送输出。它是一个单行宏,允许我们相应地过滤输出。小代码,大用途,快乐我。

由于__FUNCTION__(以及C ++中的__func__)定义已经改变(为了使其符合标准,我相信)它也使得该宏不可行。

我已经使用了一个手工构建字符串的函数,但我喜欢我的宏。

我错过了一个简单的方法来让这个简单的单行宏在Gcc 3.3下工作吗?

:D

1 个答案:

答案 0 :(得分:5)

由于__FUNCTION____func__是预定义的标识符而不是字符串文字,因此不能在预处理程序字符串文字串联中使用它。但您可以在printf格式化中使用它。另请注意,使用##args代替__VA_ARGS__来使用GNU样式的可变参数宏参数来解决__func__和可能为零的args之间的逗号问题。

#define DEBUG_WARNING(fmt, args...) \
  printf(">WARNING: %s() " fmt "\n", __func__, ##args)