常量與變量是程式操作數據的兩大核心實體。本文釐清兩者概念、分類、定義方式與內存模型,並介紹符號常量(#define)的最佳實踐。
| 特性 | 常量 | 變量 |
|---|---|---|
| 值是否可改 | 執行期間不可改 | 可隨時修改 |
| 使用前需定義 | 直接常量無需,符號常量需 | 必須先定義後使用 |
| 內存佔用 | 直接常量不佔變量空間 | 佔固定存儲單元 |
12、0、-34.6、-1.23'a'、'b'用標識符代表常量值,必須先定義:
#define IDENTIFIER value
#define PRICE 30
main() {
int num = 10, total;
total = num * PRICE;
printf("total=%d", total); // 300
}
PRICE 比 30 更易讀。PRICE = 40; 錯誤)。MAX_SIZE),變量小寫(maxSize),一眼區分。type name1, name2, ...;
type name = initial_value;
int num, total;
double price = 123.123;
char a = 'a', abc;

a = 10 將 10 寫入 a 對應的內存單元。| 場景 | 推薦做法 |
|---|---|
| 固定業務參數 | #define MAX_USERS 1000 或 const int MAX_USERS = 1000; (C99+) |
| 陣列維度 | #define BUF_SIZE 1024;char buf[BUF_SIZE]; |
| 魔術數字消除 | 所有字面常量提煉為符號常量 |
| 變量定義位置 | C89:區塊開頭;C99+:就近定義(推薦) |
| 初始化 | 定義時即初始化,避免未定義值 Bug |
常量代表「不變的業務語義」,變量代表「可變的運行狀態」。善用 #define(或 const)消除魔術數字,規範變量定義與初始化,是寫出可讀、可維護代碼的第一步。