在C ++ Standard 1998和2003版本的第3.6.1.2节中,
实现不应预定义主函数。此功能不应过载。它应该 返回类型为int类型,但其类型为实现定义。
我不是母语为英语的人。我不确定“但是否则”是什么意思。是否禁止其他返回类型,或赋予C ++编译器编写者权利?
那么答案是什么?
答案 0 :(得分:12)
您引用的英语禁止声明main
返回void
。它允许参数的变化,而不是返回类型。
答案 1 :(得分:7)
Aaargh!是的,它确实。标准允许的唯一返回类型是int。引用第3.6.1节:
它应具有返回类型 int,但其他类型是 实现定义的。
意思是它看起来像这样:
int main( float f );
int main( int x, int y );
等。等
答案 2 :(得分:2)
该类型不仅包含返回类型。因此,返回类型必须是int,但考虑到剩下的参数,你可以自由,即你可以选择
int main()
和
int main(int argc, char **argv)
答案 3 :(得分:1)
标准是说返回类型必须是int
,但该类型的其余部分取决于实现。例如,您可以使用符合标准(但不是非常有用)的C ++编译器。
int main(int secondsSinceSystemStart, int myFavoriteNumber, char* aFunnyJoke)
来自Wikipedia:
在C和C ++中,main函数的函数原型看起来像下列之一:
int main(void) int main(int argc, char **argv)
参数argc,参数count和argv,参数vector分别给出程序命令行参数的数量和值。 argc和argv的名称可以是任何有效的标识符,但使用这些名称是常见的惯例。 C和C ++标准也允许其他依赖于平台的格式;例如,Unix(虽然不是POSIX.1)和Microsoft Visual C ++有第三个参数给出程序的环境,否则可以通过stdlib.h中的getenv访问:
int main(int argc, char **argv, char **envp)
Mac OS X和Darwin的第四个参数包含任意OS提供的信息,例如执行二进制文件的路径:
int main(int argc, char **argv, char **envp, char **apple)
答案 4 :(得分:0)
就参数而言,它允许
int main()
int main(int argc,char * argv [])
int main(int argc,char * argv [],char * envr [])
但是,为了保持一致性,标准返回类型应该是 int 。
答案 5 :(得分:0)
意图是除了返回类型之外的main
函数类型的各个方面是实现定义的。这意味着该标准的该条款允许此声明:
int main(int fred, char *bouncy);
但不是这一个:
void main(int fred, char *bouncy);
它的返回类型必须为int
,但允许实现具有不同的参数类型。