-1
在C中,當一個函數的返回類型爲int
,並且函數中沒有包含返回調用時,我只會收到警告。我可以避免在不返回無效的函數中返回值嗎?
這是可以接受的嗎?
int foo()
{
int number = 0;
}
返回值是什麼?
在C中,當一個函數的返回類型爲int
,並且函數中沒有包含返回調用時,我只會收到警告。我可以避免在不返回無效的函數中返回值嗎?
這是可以接受的嗎?
int foo()
{
int number = 0;
}
返回值是什麼?
標準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}
的分支,則沒有問題。
不,未定義的行爲。它相當於'return;'按照標準(至少C++)。 – chris
@chris:做出答案。 –
我問這個問題,因爲在libzip中_zip_mkstemp(char * path)沒有非Win32的返回值。 – james82345