我正在尝试做类似的事情:
#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)
问题:给出了什么?如何替换文字,没有铃铛,没有多余的装饰?
一旦从括号开始,您就会定义一个带参数的宏,并且它与某些规则绑定在一起.
所以你可以这样做,例如:
#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.