C++中main的签名参数是否具有unsigned和const限定符?

bh9*_*042 24 c++ program-entry-point signature

该标准明确规定main有两个有效(即保证有效)的签名; 即:

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

我的问题很简单,以下是合法的吗?

int main(const unsigned int, const char* const* argv);
Run Code Online (Sandbox Code Playgroud)

我的测试中说"是",但我不能确定的答案,因为我不能超载main改变intunsigned int以及非顶层const的argv -ness?如果我是,那显然是禁止的.

那么,这些修改是否可以保证在符合标准的编译器上工作?

Mot*_*tti 33

C++ 98标准在第3.6.1节第2节中说明

实现不应预定义主函数.此功能不应过载.它应具有类型的返回类型int,否则其类型是实现定义的.所有实现都应允许以下两种定义main:int main()int main(int argc, char* argv[])

因此,接受环境接受的标准并未强制规定,main但允许这样做.


因为这是经常提到的,所以前面的段落豁免了独立环境,除了记录它们的行为之外:

程序应包含一个名为main的全局函数,它是程序的指定开始.实现定义是否需要独立环境中的程序来定义主函数.[注意:在独立环境中,启动和终止是实现定义的; startup包含具有静态存储持续时间的命名空间作用域对象的构造函数的执行; 终止包含具有静态存储持续时间的对象的析构函数的执行.]


mh.*_*mh. 19

您必须使用符合标准的签名之一才能符合标准.

我完全理解你为什么要这样做.最好的方法是编写自己的函数myMain()或任何你想要的签名,并从main()调用它,包括所需的强制转换.

  • +1提供有用的答案,而不是其他人的"我不明白你为什么这样做." (5认同)