编译器可以报告未知属性的错误吗?即使有范围?

2024-05-12

在N3291“7.6.1.(3/5) 属性语法和语义 [decl.attr.grammar]”关于如何属性是用我读过的源代码写的

使用一个属性范围令牌是有条件支持的, 实现定义的行为。

and

For an 属性标记本国际标准中未指定,该行为是实现定义的。

这是否意味着属性规范如

[[ dllexport ]]
[[ hiding ]]
[[ unused ]]
[[ vendor::attrib ]]

可能会被投诉符合标准的编译器?所以可能会报告错误并停止编译?

我本来希望有一个编译器应该忽略它不知道如何处理它们的属性。好吧,这可能很危险,因为属性中的拼写错误可能会被忽略,例如[[ noretrun ]] or [[ carrys_dependencie ]] :-)

但命名空间在这里尤其有帮助,对吧?当我编译时[[ gcc::mips ]] on an 微软编译器那个人应该能够忽略这一点而不是拒绝它,对吗?


C++17 添加了一条显式声明,即忽略实现无法识别的属性。在 C++17 之前,所有属性行为都是实现定义的,因此实现可以执行任何操作。

属性规范的部分目的是让编译器制造商不再用特殊的语法和关键字使语言变得混乱。给他们一个单一的语法来指定这些东西。它是一种将编译器定义的字符串与特定对象或定义关联起来的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译器可以报告未知属性的错误吗?即使有范围? 的相关文章

随机推荐