C预处理器宏定义宏

Mik*_*ike 40 gcc c-preprocessor

你能用C中的宏做这样的事吗?

#define SUPERMACRO(X,Y) #define X Y

then

SUPERMACRO(A,B) expands to #define A B
Run Code Online (Sandbox Code Playgroud)

我有一种感觉不是因为预处理器只进行了一次.

官方gcc唯一.请不要使用第三方工具.

Mic*_*urr 31

宏不能扩展到预处理指令.从C99 6.10.3.4/3"重新扫描和进一步更换":

得到的完全宏替换的预处理标记序列不会被处理为预处理指令,即使它类似于一个,


Whi*_*ind 14

您无法在其他宏中定义宏,但您可以从宏中调用宏,这可以获得基本相同的结果.

#define B(x) do {printf("%d", (x)) }while(0)
#define A(x) B(x)
Run Code Online (Sandbox Code Playgroud)

所以,A(y)扩展到do {printf("%d", (y)) }while(0)