#define n 10
void main(void) {
int a,b,c,n; // 錯誤行
// ...
}
編譯器報錯:error C2059: syntax error : 'constant'
#define n 10 是全域文字替換,預處理階段會將後續所有 n 替換為 10。
原本宣告變數的語句 int a,b,c,n; 經預處理後變成:
int a,b,c,10; // 語法錯誤:無法宣告常數 10 為變數
編譯器看到 int ... 10 當然報 syntax error。
n 改名(如 num、count),避開巨集名稱。int a, b, c, num;n 才是需要的,移除 #define n 10,改用 const int N = 10;(有型別、有作用域、不汙染全域命名空間)。MAX_SIZE、BUFFER_LEN。maxSize、buffer_len。const / constexpr / enum 替代 #define 定義常數,享有型別檢查與作用域限制。#include <stdio.h>
#define MAX_N 10 // 巨集全大寫
void main(void) {
int a, b, c, n; // 區域變數小寫,無衝突
int s[15] = {0};
int l[MAX_N], i[MAX_N];
int A[MAX_N-1][15];
// ... 後續邏輯 ...
}
一行巨集定義,讓編譯器把變數宣告「吃」成常數,是 C/C++ 新手最常踩的坑之一。養成命名規範,善用 const,從源頭杜絕此類低級錯誤。