至于ISO_14882_2014
3.6启动和终止[basic.start]
3.6.1主要功能[basic.start.main]
2实现不应预定义主要功能。此功能不应过载。它应具有int类型的声明返回类型,否则其类型是实现定义的。
但其他类型是实现定义的。这意味着编译器可能有自己的main()
返回类型。你能指点我到GNU G ++编译器关于main()
的返回类型的位置。
返回类型必须是int
;下面的“它的类型”是指main
,而不是返回类型。也就是说,main
所采用的参数是实现定义的。但是,每个实现必须至少提供int main()
和int main(int, char**)
。
假设i386架构。从glibc start.S我们称__libc_start_main
。从glibc csu/libc-start.c __libc_start_main我们用指针类型main
调用int (*main) (int, char **, char **)
(MAIN_AUXVEC_DECL
不应该在i386上定义,我认为,仅适用于powerpc)。所以main
函数的实现定义类型是int main(int, char **, char **)
。由于堆栈如何在i386上运行,因此形式int main(void)
和int main()
以及int main(int)
和int main(int, char**)
将起作用。 main
返回类型是int
。