Last Updated on 2021-04-29 by Clay
撰寫符號常數(Symbolic Constants)是種提高『原始碼可讀性』的方法。正如經典的攝氏溫度與華氏溫度的轉換,其中邊界值與更新值等的 lower、upper、step 其實都是有意義的數字,尤其是溫度的邊界值。
像這樣神奇卻又重要的數值,我們會將其稱之為所謂的 magic number。而在程式中要讓不了解狀況的第三方開發者一眼就能明白這個數值的重要性,我們便可以將其寫成符號常數。
符號常數的使用方法
符號常數的設定需要寫在程式的開頭、#include
函式庫等敘述的底下。
#define NAME REPLACEMENT_TEXT
之後,編譯器會在每次解析到 NAME 的名稱時,自動視為 REPLACEMENT_TEXT 的值。你可能會想說:這跟使用『變數』有什麼不一樣嗎?
變數可以重新賦值、符號常數卻不行。
假設今天,我們將 X 設定成 100。
#define X 100
我們便不能再次將 X 設定成其他值:
# Error
X = 200;
這樣是會報錯的,因為在編譯器的理解中,這行程式就跟:
100 = 200;
差不多。
接下來,我們再次將前篇筆記使用 for
迴圈改寫的攝氏溫度與華氏溫度轉換的程式碼加上符號常數改寫。
#include <stdio.h> #define LOWER 0 #define UPPER 300 #define STEP 20 int main() { float F, C; // For-loop for (F=LOWER; F<=UPPER; F+=STEP) { C = (5.0 / 9.0) * (F - 32.0); printf("%3.0f %6.1f\n", F, C); } return 0; }
Output:
0 -17.8
20 -6.7
40 4.4
60 15.6
80 26.7
100 37.8
120 48.9
140 60.0
160 71.1
180 82.2
200 93.3
220 104.4
240 115.6
260 126.7
280 137.8
300 148.9
最後再次解釋符號常數(Symbolic Constants):
- 目的是提高可讀性
- 是常數而不是變數,不能賦值
References
- https://www.codesansar.com/c-programming/symbolic-constants.htm
- https://stackoverflow.com/questions/5062019/what-is-the-point-of-symbolic-constants