WinMain的奇怪返回行为

时间:2018-07-10 23:44:01

标签: c windows

首先,我应该指定我正在使用Visual Studio中的clang编译器。在调试下面的简单程序时,WinMain函数会在似乎满足特殊条件时返回变量的值。

#include <windows.h>    

int CALLBACK WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
{
    int var = 1;
    var = var + 5;
}

以上内容将在调试器中输出:The program '[11396] Project1.exe' has exited with code 6 (0x6).只要赋值的右侧表达式中有变量名,此行为就不会失败。如果我要修改最后一行以仅分配文字,例如var = 5,则每次输出将是一致的无关值:The program '[4148] Project1.exe' has exited with code -858993460 (0xcccccccc).

我怀疑这种行为与WinMain有关,因为当我改用普通的main()时,我得到的预期回报为0。关于这种奇怪行为的可能原因是什么? >

1 个答案:

答案 0 :(得分:5)

问题在于您没有明确返回任何内容。

我想也许您进行了一些任意分配(var = var + 5)的事实恰巧是在Windows用于返回值的寄存器中留下了一个“有效外观”数字。

但是事实是:没有明确的client2,则您的程序正在展示"undefined behavior"

要检查这一理论,我建议您使用“ / Fa”进行编译,并查看程序集的输出:)