2011-09-21 98 views
3

什么是ISO C标准中__attribute__的替代? 我想移植独立于编译器的软件。什么是ISO C标准中__attribute__的替换?

+0

人们用'__attribute__'做的大多数事情都是非常错误和不可移植的(打包/对齐/等等),或者只是优化,当然这些优化当然是不必要的,并且可以简单地移除以使代码可移植。在前一种情况下,您需要解决更大的不可移植性问题;只是删除'__attribute__'是很容易的部分。 –

回答

4

没有一个。

一个解决方案是抽象宏后面的属性。例如:

#ifdef __GNUC__ 
#define UNUSED __attribute((unused))__ 
#else 
#define UNUSED 
#endif 

... 

void function(void) UNUSED; 
0

这个gcc扩展提供的各种设施没有一般替代品。大多数其他不兼容gcc的编译器使用#pragma来实现类似的目标。自C99以来,C有_Pragma运算符,它允许您在代码中间散布杂注(不仅在适当的行上),并且用宏编写杂注的内容。但是,您仍然需要对单个功能进行特定“翻译”,以便将其编译为目标编译器的相应编译语法。