gpt4 book ai didi

c++ - 在宏中将字符串附加到 __FUNCTION__

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

如果我问的是一个明显的问题,请原谅我,但是在经历了一堆线程并尝试了一些东西之后,我无法确定这个简单的事情。

我有这个小程序:

#define FUNC_PREFIX __FUNCTION__ "() :"

int main()
{
printf("%s\n", FUNC_PREFIX);
return 0;
}

所以我可以传递 FUNC_PREFIX 而不是 __FUNCTION__ 来记录函数,它们将打印调用函数名称,后跟括号和冒号 - 只是为了提高日志行的可读性输出。

这在 Visual Studio 2008 中编译得很好。但是在 g++ 中,我在字符串常量之前得到了一个错误 expected ‘)’

我尝试了一些事情,比如:

#define TEMP __FUNCTION__ 
#define FUNC_PREFIX TEMP "() :"

但无济于事。

这样做的方法是什么?

最佳答案

__FUNCTION__ 不是标准 C 或标准 C++ 中的宏。

C++ 2011(§8.4 函数定义和 §8.4.1 概述)和 C 1999 或 2011 都有一个预定义的标识符 __func__,它是函数的名称。它不是宏,因此您无法在预处理器中将字符串与它连接起来。

因此,如果要使用不支持 MSVS 扩展的符合标准的 C 或 C++ 编译器,您将不得不修改代码。


GCC 手册(4.6.1 版)的第 6.47 节“函数名称作为字符串”。它记录了 __FUNCTION____func__ 的同义词。它还讨论了 __PRETTY_FUNCTION__。这些不是预处理器宏。因此,您必须调整您的代码才能与 gccg++ 一起正常工作。

关于c++ - 在宏中将字符串附加到 __FUNCTION__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12697721/

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