我读过的每本C ++书籍都是这样的: -
但是,我发现使用MFC编写的Windows程序没有任何main()函数。它使用WinMain()函数作为程序的起点。
那么我可以说使用MFC编写的Windows程序不是C ++程序吗?那么,它是什么样的程序?
感谢。
答案 0 :(得分:1)
它们仍然是C ++程序; main
函数是在链接到可执行文件的内容中定义的。
答案 1 :(得分:1)
当程序启动而不是main()
时,操作系统(或运行时库)无法决定调用不同的函数是没有理由的。在这种情况下,Microsoft之所以这样做,是因为他们希望传递与Windows启动约定更相关的不同参数。
这没有什么不妥,你还在用C ++编写,这只是意味着程序不符合ISO C ++标准。当然,当你开始使用MFC时,你有点不在标准之内。
(你已经遇到了编程C ++的一个真正奇怪的陷阱。大多数其他语言没有像仅使用标准语言特性的程序这样的概念,但是违反了语言的标准.C ++有,并且有一些数字如何进入那个奇怪的边缘。)
答案 2 :(得分:1)
这个问题的答案比是或否要复杂一点。这在很大程度上取决于你对“C ++程序”的定义有多严格。使用MSVC构建的Windows子系统程序通常不具有main
功能。 MFC是用于构建Windows子系统程序的C ++语言框架(至少在当代实践中)。出于“是否使用C ++编译器编写没有主函数的程序的C ++程序,如果没有,它是什么?” MFC无关紧要。
main
函数可以在“独立”和“托管”实现方面进行讨论。标准只需要“托管”实现即将main作为入口点。也就是说,你很难直截了当地称微软实施CRT和“独立”这一语言。
因此,我们可以使问题更具体“MFC应用程序是一个符合要求的托管C ++程序吗?”对此的回答是“技术上,非常技术上,没有。”
Re:独立与主持:
铣削C ++用户土地应用程序的任何运行通常都将被托管,这有利于标准库等。人。独立场景的示例可能在嵌入式系统或操作系统内核中。例如,在编写OS内核时,您不能依赖malloc或new等功能,因为您正在实现最终用于实现malloc和new等事务的服务(虚拟内存,进程等)。 / p>