主要功能参数的属性

12 c++ parameters program-entry-point function language-lawyer

我可以使用主函数参数的属性还是它是实现定义的?

看起来main 函数只有 2 种没有属性列表的支持形式,而通用函数声明语法确实有它。

例子:

int main([[maybe_unused]] int argc, char* argv[]);
Run Code Online (Sandbox Code Playgroud)

Ber*_*nns 7

实际上,没有明确要求必须接受主函数参数basic.start.main 的属性

但另一方面,如果您阅读dcl.attr.unused#5,您将找不到 main 的任何特殊内容,说明那里不允许这样做。

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

任何不被实现识别的属性标记都将被忽略。dcl.attr#grammar-6

不幸的是,属性有时会导致错误(即使它们不应该)。有关此问题的示例,请参见:GSL_SUPPRESS

实际上,您的代码被所有主要编译器接受,而没有警告Godbolt。所以我会说没关系。但是因为它允许有一个不带参数的 main 函数,所以我更喜欢这样。