首先,我应该指定我使用的是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。你知道这种奇怪行为的原因是什么吗?
发布于 2018-07-11 07:50:31
问题是您没有显式地返回任何内容。
我猜也许你做了一些任意赋值(var = var + 5)的事实碰巧在Windows用于返回值的寄存器中留下了一个“有效的”数字。
但事实是:如果没有显式的return SOMEVALUE;,那么您的程序就会表现出"undefined behavior"。
为了验证这一理论,我建议您使用"/Fa“进行编译,并查看汇编输出:)
https://stackoverflow.com/questions/51275329
复制相似问题