这个问题在这里已有答案:
该标准明确规定main
有两个有效(即保证有效)的签名; 即:
int main();
int main(int, char*[]);
我的问题很简单,以下是合法的吗?
int main(const unsigned int, const char* const* argv);
我的测试中说“是”,但我不能确定的答案,因为我不能超载main
改变int
来unsigned int
以及非顶层const
的argv -ness?如果我是,那么这显然是被禁止的。
那么,这些修改是否可以在符合标准的编译器上运行?
发布于 2018-09-14 12:17:56
您必须使用符合标准的签名之一才能符合标准。
我完全理解你为什么要这样做。最好的方法是编写自己的函数myMain()或任何你想要的签名,并从main()调用它,包括所需的强制转换。
发布于 2018-09-14 13:07:10
根据标准,您可能违法,但大多数运行时并不关心。他们只是推送一个整数argc
和一个指针argv
,调用你的main
,并希望你正确地解析它们。因此,在您的权限范围内,“保证工作”是值得商榷的,因为加载器实际上并不关心您所声明的参数。
如果它构建,main
将被调用。你如何解析参数取决于你。我应该澄清这是高度平台特定的,几乎整个问题。
那说,为什么?
https://stackoverflow.com/questions/-100001400
复制相似问题