#define woes - 不是的宏

ove*_*ore 3 c-preprocessor

我正在尝试做类似的事情:

#define __attribute__((aligned(2))) __attribute__((space(prog),aligned(2)))
Run Code Online (Sandbox Code Playgroud)

但编译器产生:

 error: "(" may not appear in macro parameter list
Run Code Online (Sandbox Code Playgroud)

问题:给出了什么?如何替换文字,没有铃铛,没有多余的装饰?

rix*_*rrr 5

一旦从括号开始,您就会定义一个带参数的宏,并且它与某些规则绑定在一起.

所以你可以这样做,例如:

#define succ(x) (x + 1)
Run Code Online (Sandbox Code Playgroud)

但你做不到:

#define pred(x + 1) x
Run Code Online (Sandbox Code Playgroud)

预处理器只进行一组非常有限的模式匹配.

可以做的是:

#define __aligned2__ __attribute__((space(prog),aligned(2)))
Run Code Online (Sandbox Code Playgroud)

而是使用那个定义.如果这不足以满足您的需求,您需要使用相应的自定义预处理sed.