首先,我应该指定我正在使用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。关于这种奇怪行为的可能原因是什么? >
答案 0 :(得分:5)
问题在于您没有明确返回任何内容。
我想也许您进行了一些任意分配(var = var + 5)的事实恰巧是在Windows用于返回值的寄存器中留下了一个“有效外观”数字。
但是事实是:没有明确的client2
,则您的程序正在展示"undefined behavior"。
要检查这一理论,我建议您使用“ / Fa”进行编译,并查看程序集的输出:)