主函数参数的属性
Attributes for main function parameters
我可以将属性用于主函数参数还是定义实现?
看起来 main 函数只有 2 个受支持的表单没有属性列表,而通用函数声明语法确实有它。
例:
int main([[maybe_unused]] int argc, char* argv[]);
事实上,对于主函数参数 basic.start.main 必须接受属性,并没有明确要求
。但另一方面,如果你阅读dcl.attr.unused#5,你找不到任何特别的main,它说那里是不允许的。
编译器必须知道此属性符合 C++17,但即使是未知属性也不应导致错误。您可以在标准中找到以下内容:
实现无法识别的任何属性令牌都将被忽略。 dcl.attr#grammar-6
不幸的是,属性有时会导致错误(即使它们不应该(。请参阅此问题:GSL_SUPPRESS。
在实践中,您的代码被所有主要编译器接受,而不会发出警告。因此,我会说没关系。 但是因为它被允许有一个不需要参数的主函数,所以我更喜欢它。
我可以将属性用于主函数参数还是定义实现?
来自dcl.attr.grammar:
对于本文档中未指定的属性令牌(包括属性范围的令牌(,该行为是实现定义的。
由于该属性与参数有关,并且会影响main
的声明,因此此类程序的行为是实现定义的,并且不能在符合的实现中移植。
对于您的[[maybe_unused]]
示例,此属性在 dcl.attr.unused 中指定。似乎没有措辞表明此属性会影响变量声明的类型,或者对程序的行为具有任何其他语义影响,因此该程序是可移植的。
相关文章:
- 主函数参数的属性
- C++ 命名参数习惯用语 - 未设置字符串属性
- c++ 构造函数 将 1 个字符串参数转换为 3 个属性
- 警告:忽略模板参数上的属性..在 std::unique_ptr (-wignore 属性)的声明中
- CMake 设置使用不正确的参数数调用的目标属性
- 在C++中使用参数包作为类属性是否可能和/或良好的实践
- 修改"参数视图属性"面板 (5.7.0) 上的默认属性
- 使用类属性调用具有非类型模板参数的模板函数
- 变量作为 C++11 属性参数
- 可以 main() 及其参数具有属性
- 可以将属性应用于构造函数参数
- 对于属性上的 NOTIFY 信号,如果我给它一个参数有什么区别?
- 存储模板参数包作为非类模板的属性
- 使用dllimport属性导入的函数参数
- X11 XGetImage badmatch错误(无效的参数属性)
- 用于指示返回值生存期的C++函数属性和参数相同
- GCC警告的含义:忽略模板参数上的属性(-Wignored属性)
- 有没有办法将别名模板推导到模板模板参数,同时仍保留其被推导上下文的属性
- 如何将 GCC 的 printf 格式属性与 C++11 可变参数模板一起使用?
- 参数类的属性