我正在尝试做类似的事情:
#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
。