使用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
答案 0 :(得分:5)
由于__FUNCTION__
和__func__
是预定义的标识符而不是字符串文字,因此不能在预处理程序字符串文字串联中使用它。但您可以在printf
格式化中使用它。另请注意,使用##args
代替__VA_ARGS__
来使用GNU样式的可变参数宏参数来解决__func__
和可能为零的args之间的逗号问题。
#define DEBUG_WARNING(fmt, args...) \
printf(">WARNING: %s() " fmt "\n", __func__, ##args)