我很好奇,就在Visual C 2015上做了几个测试。
int f()
{
if (false)
return 42;
// oops
}
int main()
{
int i = f();
}
我必须添加<code>if</code>以获得警告而不是硬错误:
> cl /nologo /FAs /c a.cpp
a.cpp(6) : warning C4715: 'f': not all control paths return a value
生成的汇编代码非常简单,我删除了不相关的部分。以下是<code>f()的主要内容:
f:
xor eax, eax
je label
mov eax, 42
label:
ret
xor
行基本上是eax=0
。因为<code>如果(false)</code>是一个常量条件,生成的代码甚至不需要进行比较,然后将无条件跳转到<code>标签</code>,它只是从函数返回。您可以看到,“返回值”(42
)实际上将存储在eax
中,但这一行永远不会html" target="_blank">执行。因此,eax==0
。
以下是<code>main()和<code>所做的:
call f
mov _i$[ebp], eax
ret
它调用<code>f()盲目复制到堆栈上的一个位置(其中<code>i)。因此,i==0
。
让我们尝试使用对象和构造函数进行更复杂的操作:
struct S { int i=42; };
S f()
{
if (false)
return {};
// oops
}
int main()
{
S s = f();
}
main()
所做的基本上是在堆栈上保留sizeof(S)
字节,将第一个字节的地址放在eax
中,然后调用f()
:
lea eax, _s$[ebp]
push eax
call f
同样,f()
不会做任何事情,因为它会无条件跳转到函数的末尾:
f:
xor eax, eax
je label
; some stuff
; call S::S(), which would set i to 42
; but none of that will happen
label:
ret
那幺,sizeof(S)
字节主要发生了什么?他们从未改变过。它们包含那个特定位置的内存中已经存在的内容。它们含有垃圾。
这是在给定编译器的给定版本上使用未优化的构建。更改编译器,更改行为。启用优化器,彻底改变行为。
别这样。
在 C 中,当一个应该返回对象的函数在没有 return 语句的情况下结束时会发生什么?
它会导致未定义的行为。没人能确切知道会发生什么。
返回的是什么?
不知道。根据标准,行为是未定义的。
§6.6.3/2 返回语句 [stmt.return]:
(强调地雷)
从构造函数、析构函数或具有 cv void
返回类型的函数的末尾流出等效于没有操作数的返回
。否则,流出 main
(basic.start.main) 以外的函数的末尾会导致未定义的行为。
事实上,大多数编译器都会给出警告,比如Clang:
警告:控制达到非空隙功能的结束 [-回退型]
函数缺少结束返回语句,返回类型不包括“undefined”。 在以下异步等待函数中,我的返回类型为
问题内容: 我刚刚学习(正在学习)函数参数在Python中的工作方式,并且在没有明显原因的情况下开始进行实验: 给出了输出: 哪里来的?还有,这是什么? 问题答案: 它是函数的返回值,您可以将其打印出来。如果没有语句(或者只是没有参数的),则将隐式添加到函数的末尾。 您可能想返回函数中的值,而不是打印它们:
这是我的代码行,我得到一条警告:“函数返回non void时没有返回语句警告”,我将total声明为:static int total; 有什么建议我如何摆脱警告?
问题内容: 我编写了一个打印表格的程序。我没有在主函数中包含返回语法,但是无论何时我键入echo $?它显示12。 我的源代码: 我尚未编写return 12,但每次执行程序时它仍返回12。 谢谢。 问题答案: 正如swegi所说,这是未定义的行为。 正如史蒂夫·杰索普(Steve Jessop)等人所说,在C89之前,它是一个未指定的值,并在C99中指定(观察到的行为与C99不符)。 在大多数环
嗨,我正在尝试使用烧瓶创建水平条形图,并面临以下错误。类型错误:视图函数未返回有效响应。该函数要么返回 None,要么在没有 return 语句的情况下结束。请帮忙。提前致谢。 来自flask的app.py导入Flask,重定向,url_for,render_template,请求,flash,会话导入熊猫as PD app = Flask(name)app . debug = True samp
只是无法计算方法中的return语句。