使用GCC扩展和使用clang编译的代码?

时间:2017-03-29 21:59:12

标签: c gcc

我有两个关于GCC扩展的问题

  1. 如果我使用GCC属性/扩展编译库,即使我将它们链接到使用例如clang编译的程序,它们也会工作吗?

  2. 是否应在函数声明或原型中声明函数属性/扩展名?

2 个答案:

答案 0 :(得分:2)

  1. 如果属性/扩展只影响代码生成而不影响接口,那么它应该可以工作。

  2. 取决于属性。 例如,pureconstnonnull等属性并不好,除非每个使用这些函数的翻译单元都可以看到它们 - 您应该将它们放在标题中的原型上(并使用下划线形式,例如__attribute__((__pure__)))。

    另一方面,影响代码生成或可见性的属性应该在实现上,否则如果库用户决定覆盖库提供的函数,包括头部将有效地强制它们的覆盖上的这些属性

  3. 在任何情况下,如果你在声明上放置一个属性,它也会影响定义(假设定义看到声明 - 感谢Jonathan Leffler澄清),但定义可以采用其他不存在的属性在声明中。

答案 1 :(得分:0)

这取决于扩展名。

请参阅https://clang.llvm.org/docs/LanguageExtensions.html

  

本文档描述了Clang提供的语言扩展。在   除了这里列出的语言扩展,Clang旨在支持   广泛的GCC扩展。有关更多信息,请参阅GCC手册   有关这些扩展的信息。