我有这个有效的代码:
#include <stdio.h>
#define A(x) x B
#define B(x) C(x,
#define C(x,y) y x)
int main( void ) {
printf( A("1") ("2") "3" );
}
它打印132
(A
宏的重点是将括号中参数后面的内容与之后的所有内容交换,直到另一个右括号)
但是如果我在另一个宏中使用它:
#define Z(x) x
printf( Z( A("1") ("2") "3" ) );
我收到编译错误“未终止的函数式宏调用”。
我意识到发生这种情况是因为编译器试图Z
独立处理 的参数,但我需要使用它的右括号作为标记。有没有办法可以在宏中完成这项工作?更改调用语法并不是一个真正的选择。
ps 在我得到任何关于这是多么糟糕的事情的回应之前,请放心:这不是真正的代码。这是在制作用于define
在 C 中模拟新语言的玩具程序时出现的问题。