a = b; /* 註釋開始 c = d; /* 內層註釋 */ // 外層註釋未結束,c=d 不執行
if (a = b) c; // 恆真當 b!=0 if (0 < a < 5) c; // C 中無布爾鏈式比較,恆真
#define assign(a,b) a=(char)b assign(x, y>>8) // 展開為 x=(char)y>>8,非預期 #define SQ(y) ((y)*(y)) // 參數與整體均需括號 SQ(i++) // i 自增兩次,結果錯誤
不同 .c 文件包含同一頭文件前定義 BOOL 為 char 或 int,導致結構體布局不同,交互出錯。
int foo(int a) { if (a) return 1; } // a==0 時無返回,未定義行為
位域順序、對齊方式取決於編譯器與架構(大小端),不可用於網絡協議或二進制接口。
foo(ptr->member, ptr = &buf[0]); // 參數求值順序未規定
if (...) foo();
else printf("..."); // 單語句
bar(); // 永遠執行,非預期
char* f() { char buf[80]; sprintf(buf, "..."); return buf; } // buf 失效
i / ++i // 結果取決於編譯器
void foo(int a) { BYTE *B; if (a) B=Malloc(a); if (B) *B=a; } // B 可能未初始化
#define BUFFSIZE 2048 long foo[BUFSIZ]; // BUFSIZ 為 stdio.h 定義,拼寫錯誤不報錯
int nums[] = {010, 014}; // 實為 8、12,非 10、14
char c = 127; c++; // 變負數 if (c > 127) ... // 永假
scanf("%d %d", a, b); // 缺 &
sprintf(buf, "..."); // 無長度檢查