提问人:fredoverflow 提问时间:11/18/2010 最后编辑:Jan Schultkefredoverflow 更新时间:9/26/2023 访问量:122548
C++ 中 main 的正确声明是什么?[复制]
What is the proper declaration of main in C++? [duplicate]
问:
问题
C++ 中函数的正确签名是什么?
main
什么是正确的返回类型,从中返回值意味着什么?
main
允许的参数类型是什么,它们的含义是什么?
这是特定于系统的吗?
这些规则是否随时间而改变?
如果我违反它们会怎样?
答:
该函数必须在全局命名空间中声明为非成员函数。这意味着它不能是类的静态或非静态成员函数,也不能放在命名空间(甚至是未命名的命名空间)中。main
该名称在 C++ 中不保留,但作为全局命名空间中的函数除外。您可以自由声明其他命名的实体,其中包括类、变量、枚举、成员函数和非成员函数等不在全局命名空间中。main
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)中,有两个参数,它们分别被约定为和。 是指向表示程序参数的 C 字符串数组的指针。 是数组中的参数数。argc
argv
argv
argc
argv
通常,包含程序的名称,但情况并非总是如此。 保证为 null 指针。argv[0]
argv[argc]
请注意,由于数组类型参数 (like ) 实际上只是一个伪装的指针类型参数,因此以下两种都是有效的写法 (2),它们的含义完全相同:char*[]
int main(int argc, char* argv[])
int main(int argc, char** argv)
某些实现可能允许其他类型和数量的参数;您必须查看实现的文档才能了解它支持的内容。
main()
预计返回零表示成功,返回非零表示失败。你不需要显式地写一个语句:如果你让return没有显式的语句,它和你写的是一样的。以下两个函数具有相同的行为:return
main()
main()
return
return 0;
main()
int main() { }
int main() { return 0; }
中定义了两个宏 和 ,也可以从中分别返回以指示成功和失败。EXIT_SUCCESS
EXIT_FAILURE
<cstdlib>
main()
返回的值将传递给函数,该函数将终止程序。main()
exit()
请注意,所有这些内容仅在为托管环境(非正式地,您拥有完整的标准库并且运行程序的操作系统的环境)进行编译时才适用。也可以为独立环境(例如,某些类型的嵌入式系统)编译 C++ 程序,在这种情况下,启动和终止完全由实现定义,甚至可能不需要函数。但是,如果您正在为现代桌面操作系统编写 C++,那么您正在为托管环境进行编译。main()
评论
Main
main
int
main
int
main
int
int
两个有效的电源是 和 。其他任何事情都可能编译,也可能不编译。如果未显式返回值,则隐式返回 0。int main()
int main(int, char*[])
main
评论
main
int
main
sh
int
void
int
main
来自标准文档,3.6.1.2 Main 函数,
它应该有回报 int 类型的 type,否则其类型是实现定义的。所有实现都应允许以下两项 main的定义:
int main() { / ... / }
和int main(int argc, char* argv[]) { / ... / }
在后一种形式中,应是从环境传递给程序的参数数,其中 程序运行。如果 argc 为非零,则这些参数应在 argv[0] 到 argv[argc-1] 中作为指向 以 null 结尾的多字节字符串的初始字符.....
argc
希望能有所帮助..
评论
main
int
void
int
有关返回值及其含义的详细信息
每 3.6.1 ():[basic.start.main]
中的 return 语句具有离开函数(销毁任何具有自动存储持续时间的对象)并使用返回值作为参数进行调用的效果。如果控制到达 的末尾而没有遇到语句,则效果是执行
main
main
std::exit
main
return
return 0;
的行为在第 18.5 节 () 中进行了详细说明,并描述了状态代码:std::exit
[support.start.term]
最后,将控制权交还给主机环境。如果 status 为 0 或 ,则返回状态成功终止的实现定义形式。如果 status 为 ,则返回状态 unsuccessful terminateation 的实现定义形式。否则,返回的状态为实现定义的状态。
EXIT_SUCCESS
EXIT_FAILURE
最新发布的标准(C++14)的确切措辞是:
实现应允许两者
返回和
()
int
的函数 ,指针到指针的返回
(int
char)
int
作为 的类型。
main
这清楚地表明,只要 的类型是 type 或 .因此,以下情况也是允许的: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(void)
auto main() -> int
评论