c++ - 是否可以在 gcc 3.3+ 中以旧方式使用 __func__? (C++)

标签 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

最佳答案

由于 __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/

相关文章:

c++ - 有什么方法可以编写一个类,使得不能从它继承任何类?

c - 需要递归函数的解决方案

c++ - 在运行时使用函数转换类型列表

c++ - 区分指针和数据变量

将 typeof 转换为字符串

C++模板编译错误: expected primary-expression before ‘>’ token

c - getch(ncurses)返回值在程序之间如何不同?

ruby - 在 OS X 上安装 SciRuby 失败

c++ - 从 gettimeofday 创建 ntp 时间戳

c++ - 不明白return *this "as a whole"的用法