H8+C言語入門:第3章 何もしない(2):変数−記号文字定数−
−文法(概要)−
「記号文字定数」について説明します。
「記号定数」ともいいます。
式(文)の中に数値を埋め込むのは、文法違反でありませんが、後々そのソースファイルを
読んだ人が、その値を理解するのは殆ど無理ということになります。また、同じ数字がソ
ースファイルのどこそこで使われている時、その変更を行う作業で、洩れなくするには、
ちょっとした集中力と根性が必要になるでしょう。今は、エディタの検索・置き換え機能
を使えばいいじゃん、という人がいるかもしれませんけどね。でも、ソースファイルが一
つだけだったらいいですけどね。複数のソースファイルで分割開発なんてなったら、それ
こそ、一括変更というのはとれも無理です。
そこでC言語に便利な機能が備わっております。それが記号文字定数、記号定数というも
のです。数字に意味を持たせる記号を対応させ、その数字を記号化し、それを式(文)に使
って、数字、そのものは、別のところで定義しておくというやり方です。
それでは、使い方を見てみましょう。これこそ、一目瞭然ということですけどね。
define構文というものを使います。
例 #define INIT_OF_I 0 //変数iの初期値
int i = INIT_OF_I; //変数iの宣言と初期化
上記の例では、あまりピンとこないかもしれませんが、例えば、AD変換の最低値、最高
値や、変化させるためのステップなんかを定義する時などに使えますね。
例 #define LOWER 0 //下限値
#define UPPER 300 //上限値
#define STEP 20 //ステップ・サイズ
defineの構文の一般的な定義は次の通りです。
#define 名前 それと置き換えるべきテキスト
名前をコンパイラが後続するテキストに置き換えます。
正確には、コンパイラでは、そうした名前が(引用符なしにでてくると)、それを対応する
文字列に置き換えていきます。名前としては変数名と同じ形、即ち、英字の後に英数字を
続けたものを書きます。置き換えられる文字列の方は、任意の文字列でよく、数値に限り
ません。
上記例で、LOWERとか、UPPER、STEPは、定数でありますから、変数ではないので、宣
言は、(勿論)しません。
名前(記号名)は、小文字を使う変数名と容易に区別できる様に、大文字で書くのが普通で
す。小文字を使っていいのですが、変数と見分けがつかなくなると、これもプログラミン
グ上で困ることになりますから、普通は大文字だけで構成することが多いです。
また、define文の行末には、式(文)の終わりを示すセミコロン;がないということに注意し
てください。あるとコンパイラがエラーにします。
で、この記号文字定数(記号定数)は、ソースファイルでその名前を使う前に、プログラム
の初めに置くのが普通です。また、この定義が多ければ、また、ソースファイルの構成を
考えた上で、インクルードファイル(ヘッダファイル)に定義することも多いですね。