數(shù)值型常量不應(yīng)該被硬編碼到源文件中南用。應(yīng)該使用C預(yù)處理器的#define特性為常量賦予一個(gè)有意義的名字跳芳。符號(hào)化的常量可以讓代碼具有更好的可讀性芍锦。在一處地方統(tǒng)一定義這些值也便于進(jìn)行大型程序的管理,這樣常量值可以在一個(gè)地方進(jìn)行統(tǒng)一修改飞盆,只需修改define的值即可娄琉。枚舉數(shù)據(jù)類型更適合聲明一組具有離散值的變量,并且編譯器還可以對(duì)其進(jìn)行額外的類型檢查吓歇。至少孽水,任何硬編碼的值常量必須具有一段注釋,以說(shuō)明該值的來(lái)歷城看。
常量的定義應(yīng)該與其使用是一致的女气;例如使用540.0作為一個(gè)浮點(diǎn)數(shù),而不是使用540外加一個(gè)隱式的float類型轉(zhuǎn)換测柠。有些時(shí)候常量0和1被直接使用而沒(méi)有用define進(jìn)行定義炼鞠。例如,一個(gè)for循環(huán)語(yǔ)句中用于標(biāo)識(shí)數(shù)組下標(biāo)的常量轰胁,
for (i = 0; i < ARYBOUND; i++)
上面代碼是合理的谒主,但下面代碼
door_t *front_door = opens(door[i], 7);
if (front_door == 0)
error("can't open %s\\\\n", door[i]);
是不合理的。在最后的那個(gè)例子中赃阀,front_door是一個(gè)指針霎肯。當(dāng)一個(gè)值是指針的時(shí)候,它應(yīng)該與NULL比較而不是與0比較榛斯。NULL被定義在標(biāo)準(zhǔn)I/O庫(kù)頭文件stdio.h中观游,在一些新系統(tǒng)中它在stdlib.h中定義。即使像1或0這樣的簡(jiǎn)單值肖抱,我們最好也用define定義成TRUE和FALSE定義后再使用(有些時(shí)候备典,使用YES和NO可讀性更好)。
簡(jiǎn)單字符常量應(yīng)該被定義成字面值意述,不應(yīng)該使用數(shù)字提佣。不鼓勵(lì)使用非可見(jiàn)文本字符吮蛹,因?yàn)樗鼈兪遣豢梢浦驳摹H绻强梢?jiàn)文本字符十分必要拌屏,尤其是當(dāng)它們?cè)谧址惺褂脮r(shí)潮针,它們應(yīng)該定義成三個(gè)八進(jìn)制數(shù)字的轉(zhuǎn)義字符(例如: '\007‘)而非一個(gè)字符。即使這樣倚喂,這種用法也應(yīng)該考慮其機(jī)器相關(guān)性每篷,并按這里的方法處理。