return 的核心規則return;若寫上 return; 僅用於提前退出。return 後必須跟表達式;return 之後不可有其他語句(死代碼)。return,但邏輯需清晰。int(C89),現代標準強制要求顯式聲明。0 表示正常退出,非零表示異常,具體碼由項目規範定義。| 規則 | 說明 |
|---|---|
| 不可嵌套定義 | C 不支持函數內部定義函數(GCC 擴展除外) |
| 避免無限遞歸 | 直接/間接自我調用需有明確終止條件 |
| 不可重複定義 | 同一符號只能有一個定義,但可多次聲明(extern) |
| 參數類型檢查 | 調用時實參類型必須與形參兼容,否則未定義行為 |
void modify(int a) { a++; } // 修改副本
int main() { int b = 1; modify(b); printf("%d", b); // 輸出 1 }
形參是實參的拷貝,內存地址不同,函數內操作不影響外部變量。
void modify(int *a) { *a = 1989; }
int main() { int b = 1; modify(&b); printf("%d", b); // 輸出 1989 }
傳遞的是地址的拷貝,通過解引用修改原對象內存。本質仍是值傳遞。
void modify(int &a) { a = 1989; } // a 是 b 的別名,共享內存
C 語言無此機制,勿混淆。
calculate_total_price() 而非 calc()。可重入函數可被中斷後安全再次進入(如信號處理、多線程)。核心原則:
malloc、printf、strtok 等標準庫函數多數不可重入。詳細規範請參考《函數可重入性及編寫規範》(CSDN 專欄)。
/* 錯誤:void 函數返回值被使用 */
void foo();
int x = foo(); // 編譯錯誤
/* 錯誤:返回局部指針 */
int* bad() { int a=1; return &a; } // a 生命週期結束,野指針
/* 正確:動態分配或靜態存儲 */
int* good() { static int a=1; return &a; } // 或 malloc 由調用者 free