Jef*_*eff 5 c++ macros c-preprocessor
是否可以使用宏本身的信息重新定义C++ #define宏?我尝试了下面的代码,但由于评估宏的方式,输出不是我所期望的.
#include <iostream>
#define FINAL_DEFINE "ABC"
#define NEW_DEFINE FINAL_DEFINE "DEF" // Want ABCDEF
#undef FINAL_DEFINE
#define FINAL_DEFINE NEW_DEFINE // Want ABCDEF, but get empty?
int main ()
{
std::cout << FINAL_DEFINE << std::endl; // Want ABCDEF, but doesn't compile.
}
Run Code Online (Sandbox Code Playgroud)
宏体中的宏在定义宏时永远不会展开——仅在使用宏时才展开。这意味着 的定义NEW_DEFINE不是,它正是 #define 行上出现的内容: 。"ABC" "DEF"FINAL_DEFINE "DEF"
因此,当您使用时FINAL_DEFINE,它会扩展为NEW_DEFINEwhich 然后扩展为FINAL_DEFINE "DEF"。此时它不会递归扩展FINAL_DEFINE(因为这会导致无限循环),因此不会再发生扩展。