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

#define __attribute__((aligned(2))) __attribute__((space(prog),aligned(2)))

但是编译器会产生:
 error: "(" may not appear in macro parameter list

问题:有什么作用?我该如何替换文字文本,没有铃声,没有多余的装饰?

最佳答案

使用C预处理程序是不可能的。如果要替换的文本是单个标识符(按照C标准的说法是“类对象宏”),则只能定义“文字txt替换”。您编写的内容使预处理器认为您正在尝试使用参数“(aligned(2))”定义“类似于函数的宏”,这是一种语法错误。

我可以通过将整个__attribute__构造包装在类似对象的宏中来解决此问题:

#if appropriate condition
#define ATTRIBUTE_ALIGNED_2 __attribute__((space(prog),aligned(2)))
#else
#define ATTRIBUTE_ALIGNED_2 __attribute__((aligned(2)))
#endif

然后在整个源代码中将__attribute__((aligned(2)))替换为ATTRIBUTE_ALIGNED_2

10-07 15:31