void main(...)、int main(..) 和 int _tmain() 有何不同。它们都是单进单出系统。但是我们在什么情况下使用这些启动功能呢?
2 回答
void main()
是无效的; C++ 标准要求main
返回int
. 一些编译器让你侥幸逃脱。
int main()
是两种标准形式之一。另一个是int main(int argc, char *argv[])
,可用于接收命令行参数。实现可能允许其他形式,但不是必须的——但所有这些形式都必须返回int
。
int _tmain()
特定于 Microsoft。
不同的实现支持不同的入口点(或入口点的选择)的原因是不同的操作系统或环境有不同的运行程序的方式,或者将参数信息传递给程序的不同方式。
有两种 C++ 实现:
“托管”实现假定存在某种操作系统。在托管实现上,main
符合程序要求并且必须返回int
.
“独立”实现不假设存在操作系统。在独立实现上,是否需要由实现决定main
,但标准仍然说如果main
需要,则必须返回int
。
实现的常见做法是提供托管实现的功能,但允许main
. 这符合托管实现的标准,前提是接受定义的符合标准的程序。main
实际上,实现允许(作为扩展)某些没有main
功能的不合格程序,只要它们包含实现定义的替代方案。从技术上讲,我认为它必须诊断“错误”,但实际上没有人会意外使用这样的扩展,所以他们可能不想看到诊断。
同样,符合要求的实现可以接受包含void main
. 同样,为了使实现符合要求,它必须诊断出程序不符合要求。
实现无论如何都接受的不合格程序的含义取决于实现。
_tmain
是一个 MS 扩展。它是main
窄字符版本和wmain
宽字符版本的别名。wmain
也是一个 MS 扩展,它就像main
除了argv
作为宽字符串而不是窄字符串提供之外。因此,这是一个环境示例,其中有两种不同的方式为程序提供参数,具体取决于程序是否处理窄字符范围之外的字符(即 8 位代码页之外)。