return 語句一旦執行,函數立即終止,返回調用處。函數體內 return 之後的代碼絕不會執行。
#include <stdio.h>
int test(int x) {
if (x > 0) {
printf("分支1: x>0, 返回 0\n");
return 0; // 函數在此結束
printf("這行永遠不會打印\n"); // 死代碼
}
printf("分支2: x<=0, 返回 1\n");
return 1; // 正常結束
}
int main() {
printf("調用 test(5): %d\n", test(5)); // 輸出分支1, 返回 0
printf("調用 test(-1): %d\n", test(-1)); // 輸出分支2, 返回 1
return 0;
}
運行結果:
分支1: x>0, 返回 0
調用 test(5): 0
分支2: x<=0, 返回 1
調用 test(-1): 1
return 執行時,CPU 執行 ret 指令,彈出返回地址跳轉,當前棧幀(局部變量、參數、返回地址)被銷毀。return 後的語句永遠不會命中。| 誤解 | 正確認知 |
|---|---|
| return 0 後還會執行 return 1 | 函數只能返回一次,首個 return 結束函數 |
| void 函數不用寫 return | 可寫 return; 提前退出,結尾隱式返回 |
| 循環裡 return 會跳出循環繼續執行 | return 直接跳出函數,循環、main 都不再執行 |
return result;,減少分支漏洞。-Wreturn-type (GCC/Clang) 或 /Wall (MSVC),自動檢測缺失返回。return 是函數的「終止符」,執行即刻跳轉,後續代碼屬於死代碼。理解棧幀機制有助於深入掌握函數調用、遞歸、異常處理等進階主題。