WARNING: "__FUNCTION__"() " __VA_ARGS_-6ren">
gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:28 27 4
gpt4 key购买 nike

对于 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com