正确的签名是什么 main C++ 中的函数?什么是正确的返回类型,以及从以下位置返回值意味着什么 main?允许的参数类型有哪些,它们的含义是什么?

这是系统特定的吗?这些规则随着时间的推移而改变吗?如果我违反它们会怎样?

有帮助吗?

解决方案

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

名称main是不是在C ++保留除非在全局命名空间的功能。你可以自由申报命名main,包括除其他事项外,类,变量,枚举,成员函数其他实体和非成员函数不是全局命名空间。

可以声明名为main作为成员函数或命名空间中的功能,但这样的功能不会是main功能,指定该程序启动。

main功能不能被声明为staticinline。它也不能超载;只能有一个在全局命名空间命名main功能。

main功能不能在你的程序中使用:你不允许调用从任何地方main功能在你的代码,也不是你允许把它的地址

<强> main的返回类型必须是int 即可。没有其他的返回类型是允许(这一规则是大胆的,因为它是非常普遍的看到不正确的程序,申报mainvoid的返回类型,这可能是有关main功能最频繁违反规则)

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

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

在的(1)下,没有参数。

在的(2)下,有两个参数,并且它们通常分别命名为argcargvargv是指向表示该参数给节目C字符串的数组。 argc是的argv阵列中参数的个数。

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

注意,由于阵列类型参数(如char*[])实际上只是一个变相指针类型参数,下面的两个都有效的方式写入的(2)并它们都平均完全相同的事情:

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

一些实施方式可以允许其它类型和参数数;你必须检查你的执行文件,看看它支持。

main()有望回到零,以指示成功和非零以指示失败。您不需要明确写return声明main():如果你让没有明确main()声明return回报,这是因为如果你写return 0;相同。下面的两个main()函数具有相同的特性:

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

有两个宏,EXIT_SUCCESSEXIT_FAILURE,在<cstdlib>定义的,也可以从main()返回到分别指示成功和失败。

通过main()返回的值被传递给exit()功能,终止程序。

请注意,所有的这一种编译托管环境(非正式的,那就是你有一个完整的标准库,并有运行程序的操作系统的环境下),当只适用。另外,也可以向编译独立式环境中的C ++程序(例如,某些类型的嵌入式系统),在这种情况下,启动和终止是完全实现定义和甚至可以不要求一个main()功能。如果你正在编写C ++的现代的桌面操作系统,但是,你正在编译的托管环境。

其他提示

来自标准文档, 3.6.1.2 主要功能,

它应具有INT类型的返回类型,但否则其类型是实现定义的。 所有实现均应允许以下两个主要定义:

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

在后一种形式中 argc 应是 传递给程序的参数数量 从程序运行的环境中 这些论点应通过argv [argc-1]在argv [0]中提供,作为零终止多端字符串的初始字符的指示.....

希望有帮助..

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

实施应允许两者

  • 的函数 () 返回 int

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

作为类型 main.

这清楚地表明,只要类型符合,就允许使用替代拼写 main 是类型 int() 或者 int(int, char**). 。因此,以下内容也是允许的:

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

在两个有效电源是int main()int main(int, char*[])。任何其他人的事情可能会或可能不会进行编译。如果main没有明确返回值,<强> 0 被隐式返回。

<强>详细信息上的返回值和它们的含义

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

  

main return语句具有离开main功能(破坏用自动存储持续时间的任何对象),并调用std::exit与返回值作为参数的效果。如果控制到达main的端部,而不会遇到一个return声明中,效果是,执行的

return 0;

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

  

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top