2013-04-15 79 views
-1

在C中,當一個函數的返回類型爲int,並且函數中沒有包含返回調用時,我只會收到警告。我可以避免在不返回無效的函數中返回值嗎?

這是可以接受的嗎?

int foo() 
{ 
    int number = 0; 
} 

返回值是什麼?

+5

不,未定義的行爲。它相當於'return;'按照標準(至少C++)。 – chris

+2

@chris:做出答案。 –

+0

我問這個問題,因爲在libzip中_zip_mkstemp(char * path)沒有非Win32的返回值。 – james82345

回答

5

標準6.6.3節包含規則:

既不表達也不是支撐-INIT列表的return語句只能在函數中使用不返回一個值,即,一個函數返回類型爲void,構造函數(12.1)或析構函數(12.4)。帶有非void類型表達式的return語句只能用於返回值的函數;表達式的值返回給函數的調用者。表達式的值被隱式轉換爲它出現的函數的返回類型。返回聲明可能涉及臨時對象的構建和複製或移動(12.2)。帶有braced-init-list的return語句通過copy-list-initialization(8.5.4)從指定的初始化程序列表中初始化要從函數返回的對象或引用。

離開函數的末尾等於沒有值的返回;這會導致值返回函數中的未定義行爲。

請注意,這只是一個問題,如果該功能的右大括號可達。如果執行始終採用具有return {value}的分支,則沒有問題。