首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自WinMain的奇怪返回行为

来自WinMain的奇怪返回行为
EN

Stack Overflow用户
提问于 2018-07-11 07:44:01
回答 1查看 123关注 0票数 3

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

代码语言:javascript
复制
#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。你知道这种奇怪行为的原因是什么吗?

EN

回答 1

Stack Overflow用户

发布于 2018-07-11 07:50:31

问题是您没有显式地返回任何内容。

我猜也许你做了一些任意赋值(var = var + 5)的事实碰巧在Windows用于返回值的寄存器中留下了一个“有效的”数字。

但事实是:如果没有显式的return SOMEVALUE;,那么您的程序就会表现出"undefined behavior"

为了验证这一理论,我建议您使用"/Fa“进行编译,并查看汇编输出:)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51275329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档