【发布时间】:2013-05-09 23:23:58
【问题描述】:
我在忘记编写函数的return 子句时遇到了这个问题,但是gcc 中没有警告或错误。我修复了它,但开始想知道为什么函数会在没有return 的情况下返回一些无意义的东西。以下是我尝试过的一些示例:
#include "stdio.h"
#include "stdlib.h"
int func1 () {
int i;
i = 2;
}
int func2 (int a) {
int i = a+3;
}
int func3 () {
int i;
for (i = 0; i <= 1; i++);
}
int main(void) {
int a = 0;
int b = 0;
int c = 0;
a = func1();
printf("a = %d \n", a);
b = func2(a);
printf("b = %d \n", b);
c = func3();
printf("c = %d \n", c);
}
结果是:
a = 1
b = 4
c = 7
我的问题:
1) 为什么会出现这些结果?这有什么一般规则吗?
2)为什么要保留这个东西而不是报错?它可以在某处以某种方式“有用”吗?
【问题讨论】:
-
好问题。如果有人回答您的问题,我特别感兴趣,为什么 - 如果没有明确定义 - 这样做仍然不是错误。
-
@JoachimIsaksson
return;不是完全有效吗? -
如果在 Visual Studio 2008 及更高版本中编译,编译器会报错
func must return a value
标签: c function return undefined-behavior