gpt4 book ai didi

c++ - g++ __FUNCTION__ 替换时间

转载 作者:可可西里 更新时间:2023-11-01 17:04:55 27 4
gpt4 key购买 nike

谁能告诉我什么时候 g++ 将 __FUNCTION__“宏”替换为包含函数名称的字符串?似乎在检查源代码的语法正确性之前它不能替换它,即以下将不起作用

#include <whatsneeded>
#define DBG_WHEREAMI __FUNCTION__ __FILE__ __LINE__

int main(int argc, char* argv)
{
printf(DBG_WHEREAMI "\n"); //*
}

自预处理后使用

g++ -E test.cc

来源看起来像

[...]

int main(int argc, char* argv)
{
printf(__FUNCTION__ "test.cc" "6" "\n"); //*
}

现在编译器正确地抛出,因为 *ed 行不正确。

有没有办法强制用字符串替换到更早的步骤,以便该行是正确的?

__FUNCTION__ 真的被字符串替换了吗?还是编译代码中的变量?

最佳答案

Is there any way to force that replacement with a string to an earlier step so that the line is correct?

没有。 __FUNCTION__(及其标准化对应物 __func__)是编译器 结构。另一方面,__FILE____LINE__预处理器 结构。无法使 __FUNCTION__ 成为预处理器构造,因为预处理器不了解 C++ 语言。预处理源文件时,预处理器完全不知道它正在查看哪个函数,因为它甚至没有函数的概念。

另一方面,预处理器确实知道它正在处理哪个文件,它也知道它正在查看文件的哪一行,所以它能够处理__FILE__ __LINE__

这就是为什么 __func__ 被定义为等效于静态局部变量(即 编译器 结构)的原因;只有编译器才能提供此功能。

关于c++ - g++ __FUNCTION__ 替换时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3213571/

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