前置處理的文字替換很容易產生 bug 或語法不對的錯誤,而這種錯誤對初學者而言很難被發現,因此養成良好的習慣減少錯誤的產生。下列列舉一些好習慣:

好習慣否則可能發生的錯誤 前置處理後的程式碼
定義常數請用大寫
#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 。此錯誤同上一範例。