请注意,这个问题是关于C ++所以以下问题并不适用于我。
加顶的答案只包括链接并没有真正说明什么。 GCC attributes,表单__attribute __((属性表))的单位都是℃的延伸但在C ++模式存在太多。当然,C ++也具有我称之为“标准属性”属性。这两个似乎是完全不同的,所以我要求的主要差异的摘要以及它们如何相互作用。
对于具有两组属性注释的原因主要是历史的。 C和C ++缺乏表达有用的代码注释像likely
或fallthrough
方法,使每个编译器厂商发明了他自己的扩展,以支持任何由客户要求(Visual Studio中使用__declspec
和GNU使用__attribute__
)。最近,我们还得到了C ++ 11点的属性,使这甚至混乱。
对于C ++ 11只代码,你应该probly使用新的标准语法。对于一切(C或预C ++ 11级的客户),你最好使用在库的头传统便携宏:
#ifdef __GNUC__
# define MYLIB_NOINLINE __attribute__((noinline))
#elif defined _MSC_VER
# define MYLIB_NOINLINE __declspec(noinline)
#else
# error Unknown compiler
#endif