首先,我应该指定我正在使用 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。知道这种奇怪行为的原因是什么吗?
最佳答案
问题是您没有明确返回任何内容。
我猜想也许您执行了一些任意赋值 (var = var + 5) 碰巧在 Windows 用于返回值的寄存器中留下了一个“有效的查找”数字。
但事实是:如果没有显式的 return SOMEVALUE;
,那么您的程序将显示 "undefined behavior" .
为了验证这个理论,我强烈建议您使用“/Fa”进行编译,并查看汇编输出:)
关于c - WinMain 的奇怪返回行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51275329/