C语言中printf与return有什么区别?替换后代码输出异常原因是什么?
问题原因分析
核心问题1:printf不负责返回函数值
printf的作用仅为将格式化内容输出到控制台,不会把你计算得到的sum值回传给调用test函数的上层代码。你在main函数中通过printf("%d\n", test(1, 2));打印的是test函数的返回值,而非test内部printf输出的内容。
核心问题2:有返回值的函数缺少return属于未定义行为
C语言标准明确规定,返回值类型非void的函数,若执行完函数逻辑后没有显式调用return返回对应类型的值,其返回值是未定义的:你拿到的可能是寄存器残留的随机值、栈空间的垃圾数据,自然输出结果不符合预期。
原代码的实际执行逻辑:
test函数内部的printf会先把计算出的sum值打印到控制台,之后test没有返回有效数值,main里的printf会拿到随机垃圾值再打印一次,最终控制台会出现多组混乱输出。
替换为return后逻辑正常的原因:return sum会把计算得到的sum值作为test函数的返回值回传给main,main中的printf就可以拿到正确的数值打印,完全符合需求。
内容的提问来源于stack exchange,提问作者Roee
相关产品推荐
相关产品推荐

