<戻る  目次  進む>  
          <戻 進> 雑誌 白黒 明暗   フォント 既定 ゴシック 明朝 手書き   サイズ   標準  


   不変の値の取り扱い   

  1. 第1項:初めから終わりまで不変の値
  2. 第2項:数値に名前をつける
  3. 第3項:文字列に名前をつける

[1]初めから終わりまで不変の値

実行中は変化しない値を定数と呼びます。
これまで、プログラム中に直接書き込んできた数値は、全て定数です。
直接書き込まれた文字列も定数で、文字列リテラルと呼ばれます。

プログラム中では、何度も同じ数値や文字列を使うことがあります。
例えば、円周率は約3.14159であり、この値はいついかなる時でも同じです。

この様に、同じ値や文字列を何度も書くのは無駄です。
また、その数値や文字列を変更する必要が生じた場合、修正が面倒です。

例えば、消費税を計算する機能の付いた電卓ソフトがあった場合に、
突然、消費税が3%から5%になったとしたら、
プログラム中の0.03という数値を全て0.05に書き換えなければなりません。
もしかしたら、消費税とは別の意味の0.03があるかもしれないので、
それを間違って変更しないよう、1つ1つ確認しながら書き換えるのは大変です。

そこで、あらかじめ数値に名前をつけて、その名前を使うようにします。
名前をつけた部分を修正するだけで、全ての数値が修正されますし、
名前で書かれていれば、ただの数値よりも意味がわかりやすくなります。

目次に戻る


[2]数値に名前をつける

C言語には、数値に名前をつける方法が用意されています。
それが、#define(ディファイン)疑似命令です。
#define疑似命令の使い方は次の通りです。

#define 名前 数値
まず、#define疑似命令では、文の終わりに;をつけてはいけません。
また、この文はプログラムの先頭に置くのが一般的です。
また、名前には変数と同じ文字が使えますが、大文字のアルファベットが一般的です。
次のプログラムは、本体価格を入力すると、税込価格を表示します。

#include <stdio.h>
#define EXCISETAX 0.03 /* ここで定数を宣言 */
int main(void)
{
	int price;
	printf("本体価格:");
	scanf("%d",&price);
	price = (int)((1 + EXCISETAX) * price); /* 定数使用 */
	printf("税込価格:%d\n",price);
	return 0;
}
このプログラムを実行して、300を入力した場合の結果は次の通りになります。

本体価格:300 (入力値)
税込価格:309
このプログラムでは、数値計算に#define疑似命令による定数を使っています。
税込み価格を計算する式の中で EXCISETAX と言う名前を使用していますが、
この名前は先頭の#define疑似命令によって 0.03 に置き換えられます。

この式では、EXCISETAX を置き換えた数値 0.03 が実数値なので、
計算結果も実数値になるのですが、普通は価格に実数は使わないので、
int型にキャスト(変換)して代入しています。

#define文の数値を変更すれば、プログラム中の数値も変わります。
次のプログラムは、消費税を 0.05 に変更した場合の先頭部分です。


#define EXCISETAX 0.05 /* ここで定数を宣言 */
このプログラムを実行して、300を入力した場合の結果は次の通りになります。

本体価格:300 (入力値)
税込価格:315
この様に、定数を使うと数値の意味がわかりやすくなり、修正が容易になります。

目次に戻る


[3]文字列に名前をつける

#define疑似命令では、数値だけでなく、文字列にも名前をつけられます
使い方は、数値の場合と同じですが、文字列には、当然""をつける必要があります。
次のプログラムは、プログラムの作者名を表示します。


#include <stdio.h>
#define AUTHOR "森口将憲"
int main(void)
{
	printf("作者名:%s\n",AUTHOR);
	return 0;
}
このプログラムの実行結果は、次の通りになります。

作者名:森口将憲
ここでも、AUTHOR は "森口将憲" に置き換えられます。
もちろん、#define疑似命令の部分を変更すれば、全ての AUTHOR に影響します。

目次に戻る


<−前に戻る  先頭に戻る  次へ進む−>