为什么我们在c ++中有不同版本的主要功能?

时间:2012-10-15 09:14:56

标签: c++

  

可能重复:
  What is the difference between _tmain() and main() in C++?

void main(...),int main(..)和int _tmain()如何不同。它们都是单入口和单出口系统。但在什么情况下我们使用这些启动功能?

2 个答案:

答案 0 :(得分:4)

void main()无效; C ++标准要求main返回int。有些编译器让你逃脱它。

int main()是两种标准形式之一。另一个是int main(int argc, char *argv[]),可用于接收命令行参数。实现可能允许其他形式,但不是必需的 - 但所有此类形式必须返回int

int _tmain()特定于Microsoft。

答案 1 :(得分:2)

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

有两种C ++实现:

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

“独立”实现不假设存在OS。关于独立实现,是否要求main是否需要main,但标准仍然说如果需要int则必须返回main

实现通常的做法是提供托管实现的功能,但允许main以外的入口点。这符合托管实现的标准,前提是接受 定义main的符合性程序。实际上,实现允许(作为扩展)某些不符合void main函数的不符合程序,只要它们包含实现定义的替代项。从技术上讲,我认为它必须诊断出“错误”,但实际上没有人会意外地使用这种扩展,因此他们可能不希望看到诊断。

同样,符合要求的实现可以接受包含_tmain的程序。同样,为了实现符合,它必须诊断程序不符合。

实现所接受的不合规程序的含义取决于实现。

main是MS扩展程序。它是窄字符构建中wmain的别名,宽字符构建中是wmain的别名。 main也是MS扩展,它类似于argv,但{{1}}是作为宽字符串而不是窄字符串提供的。所以这是一个环境的例子,有两种不同的方式为程序提供参数,这取决于程序是否处理窄字符范围之外的字符(即在8位代码页之外)。