下面錯誤的是()
A. 用戶定義的函數中可以沒有 return 敘述
B. 用戶定義的函數中可以有多個 return 敘述,以便可以調用一次返回多個函數值
C. 用戶定義的函數中若沒有 return 敘述,則應當定義函數為 void 型別
D. 函數的 return 敘述中可以沒有運算式
| 選項 | 正確性 | 解析 |
|---|---|---|
| A | 正確 | 回傳型別為 void 的函數可以完全沒有 return,或只有 return;;非 void 函數若控制流程可到達函數末尾而無 return,屬於未定義行為(C99 之前)或編譯錯誤(C99 之後),但語法上「可以沒有」是成立的(雖然危險)。 |
| B | 錯誤(正解) | 函數一次呼叫只能返回一個值。 多個 return 敘述是為了在不同條件下提早結束函數並返回不同值,絕非 為了「一次返回多個值」。若需返回多值,需透過指標參數、結構體或全域變數。 |
| C | 正確 | 若函數不需返回值,應宣告為 void,且函數體內可無 return 或只寫 return;。 |
| D | 正確 | return; 不帶運算式,僅用於 void 函數中提早返回。 |
int max(int a, int b) {
if (a > b) return a; // 條件 1 提早返回
return b; // 預設返回
}
// 遞迴階乘
int fact(int n) {
if (n <= 1) return 1; // 基底案例
return n * fact(n-1); // 遞迴返回
}