C++ 为什么在c++;?

C++ 为什么在c++;?,c++,C++,可能重复: void main(…)、int main(…)和int_tmain()的区别。它们都是单入口和单出口系统。但是在什么情况下我们使用这些启动函数?void main()无效;C++标准要求主< /代码>返回 int 。有些编译器可以让你逍遥法外 int main()是两种标准格式之一。另一个是intmain(intargc,char*argv[]),可用于接收命令行参数。实现可能允许使用其他表单,但不需要——但所有这些表单都必须返回int int\u tmain()特定于Micro

可能重复:

void main(…)、int main(…)和int_tmain()的区别。它们都是单入口和单出口系统。但是在什么情况下我们使用这些启动函数?

void main()
无效;C++标准要求<代码>主< /代码>返回<代码> int <代码>。有些编译器可以让你逍遥法外

int main()
是两种标准格式之一。另一个是
intmain(intargc,char*argv[])
,可用于接收命令行参数。实现可能允许使用其他表单,但不需要——但所有这些表单都必须返回
int


int\u tmain()
特定于Microsoft。

不同的实现支持不同的入口点(或入口点的选择)的原因是,不同的操作系统或环境有不同的运行程序的方式,或将参数信息传递给程序的方式不同

C++实现有两种:

“托管”实现假定存在某种操作系统。在托管实现中,一致性程序中需要
main
,并且必须返回
int

“独立”实现并不假定存在操作系统。在独立实现中,是否需要
main
取决于实现,但标准仍然规定,如果需要
main
,则必须返回
int

对于实现来说,通常的做法是提供托管实现的功能,但允许除
main
之外的其他入口点。这符合托管实现的标准,前提是接受定义
main
的一致性程序。实际上,实施允许(作为扩展)某些不符合要求的程序,如果它们包含实施定义的替代方案,则不具有主功能。从技术上讲,我认为它必须诊断“错误”,但实际上没有人会意外地使用这样的扩展,所以他们可能不想看到诊断

类似地,一致性实现可以接受包含
void main
的程序。同样,为了实现一致性,必须诊断程序不一致

实施方无论如何都接受的不合规程序的含义取决于实施方


\u tmain
是MS扩展。它是窄字符构建中的
main
和宽字符构建中的
wmain
的别名
wmain
也是一个MS扩展,它与
main
类似,只是
argv
作为宽字符串而不是窄字符串提供。这是一个环境的例子,它有两种不同的方法来给程序提供参数,这取决于程序是否处理窄字符范围之外的字符(即8位代码页之外)。< /P> AFAIK是一种特定于微软的程序……和<代码>无效主代码()/>代码>非常古老的C++。<代码>无效主程序()< /C> >永远是无效的C++。<代码>无效主()/<代码>也从来都不是有效的C(除了实现可以支持它作为扩展)之外。引入
void
关键字的同一标准(1989年ANSI C标准)定义了两种有效形式:
int main(void)
int main(int argc,char*argv[])
或等效形式。某些书籍作者编造了一个错误的想法,认为
void main()
是有效的;我想知道为什么。你完全正确。3.6.1 p2第3.6.1节[基本启动主]<代码>int main(int argc)不是必需的表单之一。某些正确信息+1