gpt4 book ai didi

c++ - 当函数中未指定返回值时,C++ 程序如何获取返回值?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:08 24 4
gpt4 key购买 nike

我最近写了一篇文章:
Weird Error in C++ Program: Removing Printout Breaks Program

...其中我试图解决一个看似令人费解的问题,其中删除 cout 语句会破坏我的程序。

事实证明,我的问题是我忘记返回我后来用于逻辑的 true/false 成功标志。

但显然正在返回一些东西,如果我把那个 cout 留在里面,那东西总是正确的,但当我把它拿出来时,它似乎“神奇地”变成了错误。

我想问大家的问题是:
当函数内没有执行返回命令时,什么决定了 c++ 函数返回什么?这有什么逻辑吗?

显然忘记返回类型不是一个好主意。不过,在这种情况下,这主要是由于我的程序的性质——一个快速的 hack 工作。后来我决定,不值得付出努力来实现一个算法来确定函数调用的成功/失败——但不小心留下了依赖于返回的代码。

像这样编译可执行文件时,令人困惑的是 g++ 没有给我任何警告或错误:

g++ main.cc -g -o it_util

我的版本是:g++ (GCC) 4.1.2 20080704(红帽 4.1.2-44)

同样,为了避免其他人在他们犯同样的愚蠢错误并遇到同样看似不稳定的行为时感到沮丧,任何人都可以阐明没有返回的函数从哪里获取其返回值吗?

谢谢!!

最佳答案

在 x86 调用约定中,整数和指针的返回值位于 EAX 寄存器中。以下是一个例子:

int func() {
if(0) return 5; // otherwise error C4716: 'func' : must return a value
}
int main() {
int a;
a = func();
}

cl.exe/Zi, MSVC++10 编译:

push    ebp
mov ebp, esp
push ecx
call j_?func@@YAHXZ ; func(void)
mov [ebp+a], eax ; assumes eax contains the return value
xor eax, eax
mov esp, ebp
pop ebp
retn

当然,这都是未定义的行为。

关于c++ - 当函数中未指定返回值时,C++ 程序如何获取返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3459810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com