很少有WinMain的问题

时间:2010-09-17 21:33:57

标签: c standards

我的问题很简单。我在网上搜索了他们,但我找到了不同的答案,所以我只想知道要跟着哪一个。

所以,首先,我认为WinMain不是C或C ++标准,但只是由Microsoft添加以确定何时加载不同的CRT启动代码,我是对的吗?

第二,WinMain是由操作系统调用的,其方式可以说类似于动态链接,或者只是程序启动点就像main一样?

我为什么这么问?我主要使用C编程MCU。我比SW更面向硬件,所以我喜欢MCU,我发现它们并为它们编程更“清晰”。

但是当我开始对C语言本身及其标准感兴趣时,我发现它很难。我的意思是,例如,在MCU上,你不需要int返回类型的main,以及在win32应用程序中,你需要不同于pure main的启动代码。

所以,我喜欢C,但我发现它的标准不知何故。感谢。

2 个答案:

答案 0 :(得分:1)

  

我相信WinMain不是C或C ++标准版,但只是由Microsoft添加以确定何时加载不同的CRT启动代码,我是对的吗?

是。所有C和C ++标准都将main()(并且只有main())定义为程序入口点(尽管它的确切签名可能因语言和标准版本而异)。

  

第二,WinMain是由操作系统调用的,其方式可以说类似于动态链接,或者只是程序启动点就像main一样?

实际上是从main()调用的。 Windows程序中也有main(),只是隐藏在WinAPI代码中。

答案 1 :(得分:1)

虽然情况完全相同,但请将C视为3种语言:

  1. 标准独立
  2. 标准托管实施
  3. 扩展托管实施
  4. 您描述的内容(WinMain)属于类型3。

    类型3程序适用于描述其使用的特定扩展的计算机

    类型2有很多规则,但是保证用这种类型编写的程序在每个计算机系统上使用标准的C编译器(几乎每台带有键盘的计算机(包括PDA,腕表,等等))都能保证一致。 ..,...))。

    类型1与类型2相同,减去一些规则和标准库 - 它应该适用于地球上的每个处理器。

    标准的文本来自 1999 2001 2004 2007.您可以在ISO网站上找到PDF({{3} })