當我忘記編寫函數的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;'完全有效? – Thokchom
如果在Visual Studio 2008及更高版本中編譯,編譯器會給出錯誤'func必須返回一個值' – Ayse