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

Dan*_*ker 4 c++ gcc

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

DEBUG_WARNING(...) printf(">WARNING: "__FUNCTION__"() " __VA_ARGS__);
Run Code Online (Sandbox Code Playgroud)

使用:

DEBUG_WARNING("someFunction returned %d", ret); 
Run Code Online (Sandbox Code Playgroud)

输出:

>WARNING: Class::FunctionName() someFunction returned -1
Run Code Online (Sandbox Code Playgroud)

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

随着__FUNCTION__(和__func__C++中)的定义发生了变化(为了使它符合标准,我相信)它也使得宏不可行.

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

我错过了一个简单的方法来让这个简单的单行宏仍然可以在Gcc 3.3下运行吗?

:D

laa*_*lto 5

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

#define DEBUG_WARNING(fmt, args...) \
  printf(">WARNING: %s() " fmt "\n", __func__, ##args)
Run Code Online (Sandbox Code Playgroud)