什么是主要的正确的声明?

C ++ main函数的正确签名是什么? 什么是正确的返回types,从main返回一个值是什么意思? 什么是允许的参数types,它们的含义是什么?

这是系统特有的吗? 这些规则是否随着时间而改变? 如果我违反了他们会怎么样?

main函数必须在全局名称空间中声明为非成员函数。 这意味着它不能是类的静态或非静态成员函数,也不能放置在名称空间(即使是未命名的名称空间)中。

除了作为全局命名空间中的函数之外,名称main不保留在C ++中。 您可以自由地声明名为main其他实体,其中包括不在全局名称空间中的类,variables,枚举,成员函数和非成员函数。

您可以声明一个名为main的函数作为成员函数或名称空间,但是这样的函数不会是指定程序启动的main函数。

main函数不能声明为staticinline 。 它也不能超载; 在全局名称空间中只能有一个名为main函数。

main函数不能在你的程序中使用:你不能在你的代码中的任何地方调用main函数,也不允许你使用它的地址。

main的返回types必须是int 。 没有其他的返回types是允许的(这个规则是粗体的,因为看到不正确的程序声明返回types为void main是很常见的;这可能是关于main函数的最常违反的规则)。

有两个main声明必须被允许:

 int main() // (1) int main(int, char*[]) // (2) 

(1)中 ,没有参数。

(2)中 ,有两个参数,它们通常分别被命名为argcargvargv是指向表示程序参数的Cstring数组的指针。 argcargv数组中的参数个数。

通常, argv[0]包含程序的名称,但事实并非总是如此。 argv[argc]保证是一个空指针。

请注意,由于数组types参数(如char*[] )实际上只是一个变相的指针types参数,下面两个都是写入(2)的有效方法,它们的意思完全相同:

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

一些实现可能允许其他types和数量的参数; 你必须检查你的实现的文档,看看它支持什么。

预期main()返回0表示成功,非0表示失败。 你不需要在main()显式地写一个return语句:如果你让main()返回的时候没有显式的return语句,就和你写的return 0; 。 以下两个main()函数具有相同的行为:

 int main() { } int main() { return 0; } 

<cstdlib>中定义了两个macrosEXIT_SUCCESSEXIT_FAILURE ,它们也可以从main()返回,分别表示成功和失败。

main()返回的值被传递给exit()函数,终止程序。

请注意,所有这些仅适用于编译托pipe环境(非正式的,有完整标准库的环境以及运行程序的操作系统)。 也可以为独立环境(例如,某些types的embedded式系统)编译C ++程序,在这种情况下,启动和终止完全由实现定义,并且甚至可能不需要main()函数。 但是,如果您正在为现代桌面操作系统编写C ++,则需要编译托pipe环境。

从标准文档3.6.1.2主要function

它应该有一个types为int的返回types,否则它的types是实现定义的。 所有的实现都应该允许main的以下两个定义:

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

在后一种forms中, argc应该是运行程序的环境中传递给程序的参数数量。如果argc不为零, 这些参数应该以argv [0]至argv [argc-1]的forms作为以空字符结尾的多字节string的初始字符 …..

希望有帮助..

两个有效的市电是int main()和int main(int,char * [])任何其他的东西都可以或不可以编译。 如果main没有显式返回一个值,则隐式返回0。

最新公布的标准(C ++ 14)的确切措词是:

一个实现应该允许两个

  • ()函数返回int

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

作为main的types。

这明确指出,只要main的types是int()int(int, char**)types,就允许使用其他拼写。 所以以下也是允许的:

  • int main(void)
  • auto main() -> int
  • int main ( )
  • signed int main()
  • typedef char **a; typedef int b, e; e main(bd, ac)

有关返回值及其含义的详细信息

每3.6.1( [basic.start.main] ):

main中的return语句具有离开main函数的效果(销毁具有自动存储持续时间的任何对象),并以返回值作为参数调用std::exit 。 如果控制到达main的结尾而没有遇到return语句,效果就是执行的效果

 return 0; 

std::exit的行为在18.5节( [support.start.term] )中详细介绍,并描述了状态码:

最后,控制权返回到主机环境。 如果状态为零或EXIT_SUCCESS ,则返回状态成功终止的实现定义forms。 如果状态为EXIT_FAILURE ,则返回状态不成功终止的实现定义forms。 否则,返回的状态是实现定义的。