一個大括號引發的編譯錯誤
錯誤代碼
int fun(int x[], int n) {
static int sum = 0, i;
for (i = 0; i < n; i++) sum += x[i];
return sum;
// ❌ 缺少右大括號 '}' 結束函數體
main() { // 被視為 fun 函數體內的標號+語句,語法錯誤
int a[] = {1,2,3,4,5}, b[] = {6,7,8,9}, s = 0;
s = fun(a,5) + fun(b,4);
printf("%d\n", s);
}
編譯器報錯示例 (GCC)
error: expected declaration or statement at end of input
main() {
^~~~
error: expected '}' at end of input
修正版
#include <stdio.h>
int fun(const int x[], int n) { // const 正確性
int sum = 0; // 不用 static!每次調用歸零
for (int i = 0; i < n; ++i) sum += x[i];
return sum;
} // ✅ 這裡必須有右大括號
int main(void) { // 標準簽名
int a[] = {1,2,3,4,5}, b[] = {6,7,8,9}, s = 0;
s = fun(a, 5) + fun(b, 4);
printf("%d\n", s); // 輸出 45
return 0;
}
避坑原則
- 括號配對:編寫
{ 時**立即寫對應的 }**,再在中間填代碼。
- 縮進對齊:良好縮進能直觀看出缺失括號 (現代編輯器自動縮進/高亮匹配)。
- 函數不嵌套:C 不支持函數內定義函數 (GNU C 擴展除外),
main 不能在 fun 內部。
- static 陷阱:累加器
sum **不能用 static**,否則多次調用結果疊加。
編輯器輔助
- VS Code: 括號自動補全、匹配高亮 (Ctrl+Shift+\)、縮進提示。
- Visual Studio: 大綱摺疊、括號匹配 (Ctrl+])、錯誤列表即時顯示。
- CLion/VS: 結構感知、重構安全。