C99 前 (stdbool.h 提供 bool, true, false) 需自行定義布林常數。慣例用整數 1 代表真、0 代表假。
#include
#define TRUE 1
#define FALSE 0
int main() {
int again = TRUE, temp;
printf("\nIt will stop when you input a num smaller than 50!\n");
while (again) {
printf("please input a num: ");
scanf("%d", &temp);
if (temp < 50) again = FALSE;
else again = TRUE;
}
return 0;
}
It will stop when you input a num smaller than 50!
please input a num: 60
please input a num: 70
please input a num: 40
// 迴圈結束
// C99 標準做法
#include
int main() {
bool again = true;
int temp;
while (again) {
scanf("%d", &temp);
again = (temp >= 50); // 直接用關係運算式結果 (0/1) 賦值給 bool
}
}
| 特性 | #define TRUE 1 | stdbool.h |
|---|---|---|
| 型別安全 | 無 (整數語境皆可用) | 有 (_Bool 型別,隱式轉換) |
| 語意清晰度 | 依賴命名慣例 | 語言原生關鍵字 |
| 除錯器顯示 | 顯示 1/0 | 顯示 true/false |
| 相容性 | 所有 C 版本 | C99 以上 |
#define TRUE !FALSE:展開後 if (x == TRUE) 變 if (x == !0) → if (x == 1),但 if (x == !FALSE) 邏輯易誤讀if (temp < 50) 比 if (temp < 50 == TRUE) 更清晰if (func())以 #define 模擬布林值是 C 語言早期的標準作法。現代專案請直接使用 <stdbool.h>,享受型別安全與語意清晰。理解歷史作法有助於閱讀舊代碼庫,但新代碼請遵循現代標準。