在C+中,main的正确声明是什么+;? 问题 < > C++中的主< /代码>函数的正确签名是什么?
正确的返回类型是什么?从在C+中,main的正确声明是什么+;? 问题 < > C++中的主< /代码>函数的正确签名是什么?,c++,function,standards,main,c++-faq,C++,Function,Standards,Main,C++ Faq,正确的返回类型是什么?从main返回值意味着什么 允许的参数类型是什么,它们的含义是什么 这个系统是特定的吗 这些规则是否随着时间的推移而改变 如果我违反了他们怎么办 必须在全局命名空间中将main函数声明为非成员函数。这意味着它不能是类的静态或非静态成员函数,也不能放在名称空间(甚至是未命名的名称空间)中 除了在全局命名空间中的函数外,C++中没有保留名称主。您可以自由声明名为main的其他实体,包括不在全局命名空间中的类、变量、枚举、成员函数和非成员函数 您可以将名为main的函数
main
返回值意味着什么
必须在全局命名空间中将
main
函数声明为非成员函数。这意味着它不能是类的静态或非静态成员函数,也不能放在名称空间(甚至是未命名的名称空间)中
除了在全局命名空间中的函数外,C++中没有保留名称<代码>主<代码>。您可以自由声明名为
main
的其他实体,包括不在全局命名空间中的类、变量、枚举、成员函数和非成员函数
您可以将名为main
的函数声明为成员函数或在命名空间中,但此类函数不是指定程序启动位置的main
函数
main
函数不能声明为static
或inline
。也不能超载,;全局命名空间中只能有一个名为main
的函数
程序中不能使用
main
函数:不允许从代码中的任何位置调用main
函数,也不允许获取其地址
主main
的返回类型必须是int
。不允许使用其他返回类型(此规则以粗体显示,因为通常会看到不正确的程序声明main
,返回类型为void
;这可能是有关main
函数的最常违反的规则)
必须允许有两个main
声明:
int main() // (1)
int main(int, char*[]) // (2)
在(1)中,没有参数
在(2)中,有两个参数,通常分别命名为argc
和argv
argv
是指向表示程序参数的C字符串数组的指针argc
是argv
数组中的参数数
通常,argv[0]
包含程序名,但情况并非总是如此argv[argc]
保证为空指针
请注意,由于数组类型参数(如char*[]
)实际上只是一个伪装的指针类型参数,因此以下两种都是写入(2)的有效方法,它们的含义完全相同:
int main(int argc, char* argv[])
int main(int argc, char** argv)
一些实现可能允许其他类型和数量的参数;您必须检查实现的文档,看看它支持什么
main()
应返回零表示成功,非零表示失败。您不需要在main()
中显式编写return
语句:如果让main()
返回而没有显式的return
语句,则与编写return 0相同代码>。以下两个main()
函数具有相同的行为:
int main() { }
int main() { return 0; }
在
中定义了两个宏,EXIT\u SUCCESS
和EXIT\u FAILURE
,它们也可以从main()
返回,分别表示成功和失败
main()
返回的值被传递到exit()
函数,该函数终止程序
请注意,所有这些仅适用于为托管环境编译时(非正式地说,在托管环境中,您有一个完整的标准库,并且有一个操作系统运行您的程序)。编译一个独立环境(例如,某些类型的嵌入式系统)的C++程序也是可能的,在这种情况下,启动和终止是完全实现的,甚至不需要一个<代码>主()/>代码>函数。如果你正在为现代桌面OS编写C++,那么你正在编译一个托管环境。 < P>这两个有效的主干是<代码> int main()< /C>和<代码> int main(int,char *])< />。其他任何东西都可以编译,也可以不编译。如果main
未显式返回值,则隐式返回0。来自标准文档,3.6.1.2 main函数
它应该有回报
int类型,但其类型由实现定义。所有实现都应允许以下两种情况
主要产品的定义:
int main(){/../}
和
intmain(intargc,char*argv[]){/../}
在后一种形式中,argc
应为从程序所在环境传递给程序的参数数
程序正在运行。如果argc为非零,则应在argv[0]到argv[argc-1]中提供这些参数作为指向的指针
以null结尾的多字节字符串的初始字符
希望这有帮助。关于返回值及其含义的详细信息
根据3.6.1([basic.start.main]
):
main
中的return语句的作用是离开main
函数(销毁具有自动存储持续时间的任何对象),并以返回值作为参数调用std::exit
。如果控件到达main
的末尾时没有遇到return
语句,则执行
return 0;
第18.5节([support.start.term]
)详细介绍了std::exit
的行为,并描述了状态代码:
最后,控制是返回