gpt4 book ai didi

c++ - __func__ 未在预处理输出中替换

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

我正在阅读 C/C++ 中的 __FUNCTION__/__func__(它们用于打印使用它们的函数的名称)。我读到的每个地方都说这些是宏,在预处理时被替换。因此,我使用命令 gcc -E prog.c 查看预处理后的输出,对此进行了调查。但是我看到 __func____FUNCTION__ 都没有被预处理器替换为函数名。

那么,它是一个宏吗?如果不是,它是什么以及如何实现?

编辑

甚至尝试过 cpp prog.c。但仍未更换。

还有 __FILE__, __LINE__, and __FUNCTION__ usage in C++这篇文章说它永远不会影响性能。请澄清。

最佳答案

它们被实现为(并且是)“魔法变量”。 The manual says :

GCC provides three magic variables that hold the name of the current function, as a string. The first of these is __func__, which is part of the C99 standard:

The identifier __func__ is implicitly declared by the translator as if, immediately following the opening brace of each function definition, the declaration

static const char __func__[] = "function-name";

appeared, where function-name is the name of the lexically-enclosing function. This name is the unadorned name of the function.

它们通常不能作为预处理器宏实现;预处理器不解析函数作用域。当然,预处理器可以理解足够的语法以了解函数的开始和结束位置,但通常它们不在该级别运行。

关于c++ - __func__ 未在预处理输出中替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27899436/

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