首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于使用[[不返回]]以外的属性的建议?

关于使用[[不返回]]以外的属性的建议?
EN

Stack Overflow用户
提问于 2011-09-16 08:23:02
回答 1查看 609关注 0票数 4

在讨论在另一个question中使用特定于供应商的属性时,我问自己,“我们应该告诉人们使用标准中没有列出的属性的规则是什么”

定义的两个属性是[[ noreturn ]][[ carries_dependencies ]]。标准留下了编译器应该如何对未知属性作出反应的问题--因此,按照标准,编译器可能会以错误消息停止。这不是GCC所做的,而是发出警告并继续下去。这可能是最常见的编译器所期望的行为。出于这个原因,我想在标准中读一个“应该”,但我们没有它。

论文N2553提出了柔性属性。它列出GCC ( unusedweak)和MSVC (dllimport)使用的其他属性。对于OpenMP,广泛支持的并行化框架、作用域属性被建议,例如。omp::for(clause, clause)omp::parallel(clause,clause).因此,我们很可能在某些特定于供应商的属性支持语法之后很快就会使用它们。

因此,当我们现在“出去”并告诉人们关于的事情时,关于使用属性的建议应该是什么呢?

  • 只使用noreturn和编译器,而不是旧语法,例如。在您移植代码时,定义一个宏(当前的situation)
    • Use是您最喜欢的编译器支持的属性,因为您知道这段代码可能无法移植到另一个符合标准的编译器,因为如果该标准允许编译器在出错时停止运行,那么您必须考虑到这种情况会发生。)这听起来有点像提倡编写不可移植的代码。
    • ,或者,我猜,希望使用最多的编译器对未知属性发出警告,这样您就可以使用特定于供应商的属性,同时记住,在罕见的情况下,您可能会遇到问题。

注意最后两个项目中的细微差别。虽然两者都说“使用所需的属性”,但第3条的信息是“不关心其他编译器”,而item4则将标准文本“实现定义的行为”隐式地重新表述为“编译器应该发出诊断消息”。

,对于即将到来的最佳实践,有什么建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-17 05:42:51

最佳实践是使用宏,这是唯一一个在实际条件下可以合理移植的方法,更不用说标准中的模棱两可。很多年后,我们才会忘记不支持属性的编译器。

编译器的数量和这些编译器定义的自定义__keywords__的数量都会不断增加,因此语言定义一种控制损害的方法是有意义的。它不需要彻底改变人们编写不可移植代码的方式,也不需要使不可移植代码可移植(尽管标准属性会这样做)。只要给咖啡因的编译器后端工程师一个沙箱,当他们想要扩展语法的时候,就有一个好处。

不过,除了当前标准的属性标记之外,没有任何属性标记保留给实现或语言,这有点令人担忧。因此,当他们决定更多的标准化时,将会有麻烦。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7441951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档