2010-03-11 193 views
4

我有這個警告。C警告'返回'沒有值,在函數返回非void

警告:'返回'沒有值,在函數返回非void。

+9

「醫生,當我在這裏揉時疼!」 「好吧,停止這樣做吧!」 :-P認真地說,如果一個函數有一個返回類型,不要只返回',而是返回一個所需類型的值。 – 2010-03-11 05:01:13

回答

12

您有類似:

int function(void) 
{ 
    return; 
} 

添加一個返回值,或者改變返回類型爲void。

的錯誤信息是非常明確的:

警告:沒有任何價值「迴歸」,在函數返回非空。

沒有價值的回報與我所展示的相似。該消息還告訴你,如果函數返回'void',它不會給出警告。但是因爲這個函數應該返回一個值,但是你的'return'語句沒有,所以你有一個問題。

這通常代表古代的代碼。在C89標準之前的日子裏,編譯器不一定支持'void'。接受的風格,那麼:

function_not_returning_an_explicit_value(i) 
char *i; 
{ 
    ... 
    if (...something...) 
     return; 
} 

技術上,函數返回一個int,但預計沒有價值。這種類型的代碼引發了你所得到的警告 - 而C99正式宣佈禁止它,但編譯器爲了向後兼容性繼續接受它。

+0

我感謝您解釋爲什麼這只是作爲警告。 – tomjakubowski 2016-01-07 00:58:50

3

此警告,當你做這種情況:

int t() { return; } 

因爲t()被聲明爲返回一個int,但return語句沒有返回一個int。正確的版本是:

int t() { return 0; } 

顯然你的代碼是比較複雜的,但它應該是很容易在你的代碼被發現裸return

4

,如果你忘記添加一個return語句作爲最後一個語句這個警告也發生了:

int func(){} 

如果不指定一個函數它默認的返回類型爲int不空,因此這些都是還錯誤:

func(){} 
func(){ return; } 

如果你真的不需要返回一個值,你應該聲明你的函數爲返回void:

void func(){} 
void func(){ return; }