Dan*_*ith 1 c macros header-files
我有一个 C 文件,其中包含
#define A f
#define B (
#define C x
#define D )
#define f(x) 1
int main () {
A B C D;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行预处理器时,我得到
int main () {
f ( x );
}
Run Code Online (Sandbox Code Playgroud)
并且最后一个宏不会被扩展。
我究竟做错了什么?
如果将宏作为参数传递给另一个宏,则可以:
#include <stdio.h>
#define A f
#define B (
#define C x
#define D )
#define x 1
#define f(x) x
#define EXPAND(a,b,c,d) a b c d
int main () {
printf("%d", EXPAND(A,B,C,D) );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里,在每个标记扩展后,宏内部的“宏替换列表”EXPAND将被重新扫描,直到没有更多的宏可供扩展。而在您的示例中,每个宏只是被替换为#define.