好習慣 | 否則可能發生的錯誤 |
前置處理後的程式碼 |
定義常數請用大寫
|
#define n 100
.....
n++; |
.....
100++; <--常數無法運算(相當於 100=100+1) |
正確做法:#define N 100
撰寫程式中,看到大寫就會提醒是常數,不會寫出 N++; |
目的文字請勿用分號 ; |
#define SUM1To100 sum(1,100);
.....
printf("1+2+...+100=%d\n",SUM1To100); |
.....
printf("1+2+...+100=%d\n",sum(1,100););
//printf 內的參數不能加分號 ; |
正確做法:#define SUM1To100 sum(1,100)
得到 printf("1+2+...+100=%d\n",sum(1,100)); |
運算式最好加刮號 |
#define SUM(a,b) a+b
.....
x=SUM(3,4)*5;//看起來像是 (3+4)*5
|
.....
x=3+4*5; //事實上是先乘除後加減 |
正確做法:#define SUM(a,b) (a+b)
得到 x=(3+4)*5; |
巨集置換看不到執行期的變數內容,因此請勿使用程式碼中的變數內容 |
#define X 3
int a=3
.....
#if X == a //此 a 不是變數的 a
a=10;
#endif
printf("%d\n",a);
|
int a=3
..... printf("%d\n",a); |
此例 #if X == a 的 a 是指巨集定義 #define a,並非程式中的 int a 。
因此 a 並未定義,故 #if X == a 會被解成
#if X == undefine (故不相等)
另外,若 a 與 b 均未被定義,則 #if a == b 會被判定相等。 |
const int a=3;
int main(){
int b=2;
#ifdef a
b=10;
#endif
printf("%d\n",b);
return(0);
} |
const int a=3;
int main(){
int b=2;
printf("%d\n",b);
return(0);
} |
此例 #ifdef a 的 a 是指巨集定義 #define a,並非程式中的 const int a 。此錯誤同上一範例。 |