【发布时间】:2013-03-29 13:18:27
【问题描述】:
我有这个有效的代码:
#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 的参数,但我需要使用它的右括号作为标记。有没有办法可以在宏中完成这项工作?更改调用语法并不是一个真正的选择。
附言在我收到任何关于这是多么糟糕的事情的回应之前,请放心:这不适用于真正的代码。这是在制作使用define 在C 中模拟新语言的玩具程序时出现的问题。
【问题讨论】:
标签: c macros c99 c-preprocessor