作者pppty (无)
看板C_and_CPP
标题[问题] C语言return问题
时间Tue Jan 17 02:57:07 2017
开发平台(Platform): (Ex: Win10, Linux, ...)
Win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
单纯测试有设定return型态但是没有return值的状况
喂入的资料(Input):
无
预期的正确结果(Expected Output):
compile不过
错误结果(Wrong Output):
印出传入的数值
程式码(Code):(请善用置底文网页, 记得排版)
#include <stdio.h>
int sum(int a){
a+1;
}
int main(){
int a = 5;
printf("%d", sum(a));
}
补充说明(Supplement):
以前初学C的时候因为没测试过这种状况
前两天碰到但是不知道原理
原本猜测会在编译时候出错 但是编译可以过 以及还能够印出值(5)
代表以前学到的概念错很大
想请问compiler是怎麽处理这个部分的呢?
(以为compiler不会过但是过了,过了以为数值会是未知数却是5这样)
希望能有前辈能解惑 感谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.240.240.142
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1484593030.A.7D0.html
1F:推 winken2004: 大概是calling stack的关系 01/17 04:04
2F:→ barrykaze: return值没写 01/17 09:15
3F:推 james732: 你为什麽觉得应该要能编译与执行? 01/17 09:32
4F:推 firejox: 只是Warning开的不够多吧(′・ω・`) 01/17 10:31
5F:→ HolyBugTw: -Wall 01/17 10:54
6F:推 boss0405: 印象中会报warning,印出5应该属於未定义行为 01/17 11:02
7F:→ Neisseria: 换个编译器看看,可能结果会不一样 01/17 11:17
8F:→ Neisseria: 玩玩就好,真的要用的程式不要这样写 01/17 11:17
9F:→ pppty: 这是一个刚学的朋友问的问题 但是能力不够给他答案 01/17 12:58
10F:推 jerryh001: 因为有个原本要放return值的位置 因为没return 所以就 01/17 15:26
11F:→ jerryh001: 抓到a的位置 01/17 15:26
12F:→ narcissusli: 遇过compiler会重复使用位置, 跟最佳化有关吗? 01/17 23:19
13F:嘘 Sidney0503: 又来一个未定义行为 01/18 06:50