关于不同C编译器中的__attribute__支持

juzqafwq  于 2023-10-16  发布在  其他
关注(0)|答案(1)|浏览(157)

我发现很多编译器都不支持__attribute__

#if defined (__GNUC__)

short xxxyyy[aaa_SIZE]__attribute__ ((aligned (32)));

#endif

或甚至

#ifndef __attribute__(x)

#define __attribute__(x)

#endif

据我所知,GNUC是唯一一个支持这个__attribute__的-是正确的吗?像上面这样使用宏是合理的一般做法吗?
有没有什么C标准支持这一点?还是有更好的办法?

0ejtzxu1

0ejtzxu11#

新的C标准(C23-工作草案)添加了[[attribute]]的属性。它是便携式的。自C11以来,它们已经是C的一部分。
范例:

[[noreturn]] void f(void) {
abort(); // ok
}

所有较旧的C标准都没有它,它们是编译器扩展。不要使用它们,除非你真的需要它们(例如编写低级硬件)。
如果这样一个程序必须由许多编译器编译,你将需要大量的#if

相关问题