C 对象宏扩展为 C 函数宏

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)

并且最后一个宏不会被扩展。

我究竟做错了什么?

Lun*_*din 5

如果将宏作为参数传递给另一个宏,则可以:

#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.