main()中的无名参数是否严格遵从?

Are nameless parameters in main() strictly conforming?

本文关键字:是否 参数 无名 main      更新时间:2023-10-16

c++允许以下两种main定义:

int main() { }
int main(int argc, char* argv[]) { }

它还允许char*[]char**, argcargv以程序员希望的任何名称命名。但是,它是否也允许:

int main(int, char*[]) { }

这与上面的例子相同吗?它是否严格符合规定?注意,我不关心它是否在你最喜欢的编译器中编译,我只询问标准。

是的,正如@Captain Obvlious所说,c++只关心参数的类型。c++标准委员会的文件在此公开供您参考。

3.6.1 Main函数
  • 实现不能预先定义main函数。这函数不应过载。它的返回类型应为typeInt,但它的类型是由实现定义的。所有实现应该同时允许
  • —返回int和

    的函数

    —函数(int,指向char的指针)返回int

    对,很有道理。

    首先,C++11 3.6.1 /2声明main()的允许形式,包括两种规范形式:

    实现不能预先定义main函数。此函数不得重载。它的返回类型为int,否则它的类型是实现定义的。所有实现应允许以下两个main定义:

    int main() { /* ... */ } and
    int main(int argc, char* argv[]) { /* ... */ }

    然后,在C++11 8.3.5 Functions /11中,它声明函数定义实际上不需要参数名:

    标识符可选地作为参数名提供;如果在函数定义(8.4)中出现,则命名一个形参(有时称为"形式实参")。

    然而,由于缺少名称意味着您不能访问变量,因此使用不包含它们的规范形式可能是更好的主意:

    int main() { ... }
    
    相关文章: