捕获请看下面的代码:强制C预处理器的宏价值
#include <stdio.h>
#define MACRO_A "early"
#define MACRO_B MACRO_A
#undef MACRO_A
#define MACRO_A "late"
#define MACRO_C MACRO_A
int main(void) {
printf("MACRO_B = %s, MACRO_C = %s\n", MACRO_B, MACRO_C);
return 0;
}
我预计MACRO_B将捕获MACRO_A的价值在它被定义时,即“早”。但上面的代码打印:
MACRO_B = late, MACRO_C = late
有没有办法迫使MACRO_B捕捉MACRO_A当时的价值就被定义? (注:在不确定性的情况下,假设我们使用gcc
。)
我真正使用的情况是,我使用的是单一的宏观形式来创建一个共享的定义不同的扩展:一个扩展定义struct
布局,重新定义会为结构创建初始化程序等。这使我可以将所有信息保存在一个地方。
出于这个原因,它会捕捉到“当前”宏扩展在另一个宏,这样我可以重新使用原来的定义而不会失去它的状态是有用的。
号宏替换发生,只有当前定义。否则它不会是C预处理器。 –
是的,看起来这确实是http://stackoverflow.com/questions/34486726/c-preprocessor-evaluate-macro-early的重复,尽管关注整数,它在回答问题方面做得更好。很高兴删除这一个... –