任何人都可以告诉g ++何时__FUNCTION__用包含函数名称的字符串替换'macro'?它似乎可以替换它,直到它检查源代码的语法正确性,即以下将不起作用
#include <whatsneeded>
#define DBG_WHEREAMI __FUNCTION__ __FILE__ __LINE__
int main(int argc, char* argv)
{
printf(DBG_WHEREAMI "\n"); //*
}
Run Code Online (Sandbox Code Playgroud)
因为经过预处理后使用
g++ -E test.cc
Run Code Online (Sandbox Code Playgroud)
来源看起来像
[...]
int main(int argc, char* argv)
{
printf(__FUNCTION__ "test.cc" "6" "\n"); //*
}
Run Code Online (Sandbox Code Playgroud)
现在编译器正确抛出,因为*ed行不正确.
有没有办法强制用字符串替换前一步,以便该行正确?
难道__FUNCTION__真的毕竟是一个字符串替换?或者它是编译代码中的变量?