【发布时间】:2011-03-13 22:00:20
【问题描述】:
谁能告诉g++何时用包含函数名的字符串替换__FUNCTION__'macro'?似乎只有在检查了源代码的语法正确性之后才能替换它,即以下内容将不起作用
#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__ 真的被字符串替换了吗?还是编译后代码中的变量?
【问题讨论】:
标签: c++ string compiler-construction g++ c-preprocessor