对于 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
最佳答案
由于 __FUNCTION__
和 __func__
是预定义的标识符而不是字符串文字,因此您不能在预处理器字符串文字连接中使用它。但是您可以在 printf
格式中使用它。另请注意,使用 ##args
而不是 __VA_ARGS__
来使用 GNU 样式可变参数宏参数来解决 __func__
和之间的逗号问题可能为零参数。
#define DEBUG_WARNING(fmt, args...) \
printf(">WARNING: %s() " fmt "\n", __func__, ##args)
关于c++ - 是否可以在 gcc 3.3+ 中以旧方式使用 __func__? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1339997/