C 教材:原始碼的可讀性、符號常數

談到「提高程式原始碼的可讀性」,一共有四個ㄆㄝ步:

前三點已經學過,現在看第四點。 觀察 f2c-while.c,裡面有一些常數:30、100、5。 它們並不是「隨便」或「神奇」地出現在程式裡, 而是有其意義的。 但是,對一個外人而言,可能並不清楚它們的意義。 這種常數,被程式設計師匿稱為「神秘數」(magic numbers)。

雖然 f2c-while.c 實在很短,有經驗的人很容易看出來 30、100、5 的意義, 但是我們還是拿這個程式來示範符號常數 (symbolic constant) 的用法。


#include <stdio.h>
#define LOW 30
#define HIGH 100
#define GAP 5
 
/* 將華氏溫度,從 LOW 到 HIGH,每 GAP 一次,
   換算成對應的攝氏溫度  (f2c-sym.c) */
main() {
    double fahr=LOW;
 
    while(fahr <= HIGH) {
        printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9);
        fahr = fahr + GAP;
    }
}

我們很容易觀察到幾個簡單現象: 我們特別要聲明兩點:

事實上,符號常數的存在意義,純粹是提高原始碼給人類閱讀的清晰度。 C 才不管它呢。C 直接讀到的是那個符號常數的定義。您可以想像,當我們讀到

HIGH = LOW + 70;
的時候,其實 C 讀到的是
100 = 30 + 70;
而這個語句,對數學家來說是理所當然的,但是對 C 來說是沒有意義的。

同理,如果您定義

#define HIGH (LOW+70)
的時候,則當您寫
while (fahr <= HIGH) {
其實 C 讀到的是
while (fahr <= (30+70)) {

習題

  1. 寫一個程式,輸出攝氏到華氏的溫度轉換表。 其中攝氏度數從 10 到 100 度 (含),每 5 度計算一次。 必需使用符號常數。
  2. 寫一個程式,以合理而清晰的格式,輸出九九乘法表。

[BCC16-C]
單維彰 (2000/03/24) ---
[Prev] [Next] [Up]