首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >主要功能参数的属性

主要功能参数的属性
EN

Stack Overflow用户
提问于 2020-07-05 04:44:17
回答 2查看 496关注 0票数 12

我可以为主要函数参数使用属性吗?或者它是否定义了实现?

看起来像主函数只有两个不支持http://eel.is/c++draft/dcl.attr#nt:attribute-list的表单,而普通的函数声明语法确实支持它。

示例:

代码语言:javascript
运行
复制
int main([[maybe_unused]] int argc, char* argv[]);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-07 15:33:18

实际上,对于主要函数参数basic.start.main,不存在必须接受属性的明确要求。

但是另一方面,如果你读了dcl.attr.unused#5,你就找不到main的什么特别的东西,上面说那里是不允许的。

编译器必须知道此属性符合C++17,但即使未知属性也不应导致错误。您可以在标准中找到这一点:

任何不被实现识别的属性标记都会被忽略。Dcl.attr#语法6

不幸的是,属性有时会导致错误(即使它们不应该)。请参阅扩展此问题:抑制

实际上,在没有警告哥德波特的情况下,所有主要编译器都可以接受您的代码。因此,我想说,这是可以的。但是因为允许它有一个不需要任何论证的主函数,所以我更倾向于这样做。

票数 7
EN

Stack Overflow用户

发布于 2020-07-05 15:06:09

我可以为主要函数参数使用属性吗?或者它是否定义了实现?

来自dcl.attr.grammar

对于本文档中未指定的属性令牌(包括属性范围-令牌),行为是实现定义的。

由于属性与参数有关,并且影响main的声明,因此这样一个程序的行为是由实现定义的,不能跨符合的实现进行移植。

对于[[maybe_unused]]示例,这个属性是在dcl.attr.unused中指定的。似乎没有任何措辞表明该属性会影响变量声明的类型,或者对程序的行为产生任何其他语义影响,因此该程序是可移植的。

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

https://stackoverflow.com/questions/62736923

复制
相关文章

相似问题

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