我可以将 __func__ 替换为 C 宏中的标识符名称吗?

标签 c macros

我想写一个 C 宏来接受这个:

int foo() {
  MY_MACRO
}

并将其扩展为:

int foo() {
  _macro_var_foo++;
}

我发现我不能使用 __func__,因为它实际上并没有在宏中展开;预处理器将其视为变量。

有什么方法可以让它发挥作用吗?

最佳答案

预处理器不知道函数,只知道源文件和行号。在那个阶段它不执行句法分析,只是文本分析和替换。这就是为什么 __func__ 是一个神奇的变量,而不是像 __FILE____LINE__ 那样神奇的宏。

关于我可以将 __func__ 替换为 C 宏中的标识符名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1552454/

相关文章:

c - sqlcxt() 中的段错误

c - C 错误定义到字符串的优雅映射

宏可以用来模拟 C++ 模板函数吗?

c - 如何使用 C 宏将字符串分成多个部分?

c - Sys V ABI 规范(i386 和 AMD64)中描述的标准 "Function Calling Sequence"是否适用于静态 C 函数?

c - 在 C 中多次声明一个函数有什么意义?

c++ - setlocale 错误 LNK2019

python - c有scanf,python有类似的东西吗?

c++ - 在编译时在 static_assert() 中显示整数

c++ - 错误 C2070 - 未指定外部数组大小。 - 传递给 MACRO 的数组