<分区>
考虑以下代码:
#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
布局,一个重新定义创建结构的初始值设定项等。这让我可以将所有信息保存在一个地方。
出于这个原因,在另一个宏中捕获“当前”宏扩展会很有用,这样我就可以在不丢失其状态的情况下重新使用原始定义。