不変の値の取り扱い
初めから終わりまで不変の値
実行中は変化しない値を定数と呼びます。
これまで、プログラム中に直接書き込んできた数値は、すべて定数です。
直接書き込まれた文字列も定数で、文字列リテラルと呼ばれます。
プログラム中では、何度も同じ数値や文字列を使うことがあります。
たとえば、円周率は約3.14159であり、この値はいついかなる時でも同じです。
この様に、同じ値や文字列を何度も書くのはムダです。
また、その数値や文字列を変更する必要が生じた場合、修正が面倒です。
たとえば、消費税を計算する機能の付いた電卓ソフトがあった場合に、
突然、消費税が3%から5%になったとしたら、
現在ではそれどころではなくなってしまいましたが・・・
プログラム中の0.03という数値をすべて0.05に書き換えなければなりません。
もしかしたら、消費税とは別の意味の0.03があるかもしれないので、
それを間違って変更しないよう、1つ1つ確認しながら書き換えるのは大変です。
そこで、あらかじめ数値に名前をつけて、その名前を使うようにします。
名前をつけた部分を修正するだけで、すべての数値が修正されますし、
名前で書かれていれば、ただの数値よりも意味がわかりやすくなります。
これまで、プログラム中に直接書き込んできた数値は、すべて定数です。
直接書き込まれた文字列も定数で、文字列リテラルと呼ばれます。
プログラム中では、何度も同じ数値や文字列を使うことがあります。
たとえば、円周率は約3.14159であり、この値はいついかなる時でも同じです。
この様に、同じ値や文字列を何度も書くのはムダです。
また、その数値や文字列を変更する必要が生じた場合、修正が面倒です。
たとえば、消費税を計算する機能の付いた電卓ソフトがあった場合に、
突然、消費税が3%から5%になったとしたら、
現在ではそれどころではなくなってしまいましたが・・・
プログラム中の0.03という数値をすべて0.05に書き換えなければなりません。
もしかしたら、消費税とは別の意味の0.03があるかもしれないので、
それを間違って変更しないよう、1つ1つ確認しながら書き換えるのは大変です。
そこで、あらかじめ数値に名前をつけて、その名前を使うようにします。
名前をつけた部分を修正するだけで、すべての数値が修正されますし、
名前で書かれていれば、ただの数値よりも意味がわかりやすくなります。
数値に名前をつける
C言語には、数値に名前をつける方法が用意されています。
それが、#define(ディファイン)疑似命令です。
#define疑似命令の使い方は次の通りです。
まず、#define疑似命令では、文の終わりに;をつけてはいけません。
また、この文はプログラムの先頭に置くのが一般的です。
また、名前には変数と同じ文字が使えますが、大文字のアルファベットが一般的です。
次のプログラムは、本体価格を入力すると、税込価格を表示します。
このプログラムを実行して、300を入力した場合の結果は次の通りになります。
このプログラムでは、数値計算に#define疑似命令による定数を使っています。
税込み価格を計算する式の中で EXCISETAX と言う名前を使用していますが、
この名前は先頭の#define疑似命令によって 0.03 に置き換えられます。
この式では、EXCISETAX を置き換えた数値 0.03 が実数値なので、
計算結果も実数値になるのですが、普通は価格に実数は使わないので、
int型にキャスト(変換)して代入しています。
#define文の数値を変更すれば、プログラム中の数値も変わります。
次のプログラムは、消費税を 0.05 に変更した場合の先頭部分です。
このプログラムを実行して、300を入力した場合の結果は次の通りになります。
この様に、定数を使うと数値の意味がわかりやすくなり、修正が容易になります。
それが、#define(ディファイン)疑似命令です。
#define疑似命令の使い方は次の通りです。
#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
税込価格:309
このプログラムでは、数値計算に#define疑似命令による定数を使っています。
税込み価格を計算する式の中で EXCISETAX と言う名前を使用していますが、
この名前は先頭の#define疑似命令によって 0.03 に置き換えられます。
この式では、EXCISETAX を置き換えた数値 0.03 が実数値なので、
計算結果も実数値になるのですが、普通は価格に実数は使わないので、
int型にキャスト(変換)して代入しています。
#define文の数値を変更すれば、プログラム中の数値も変わります。
次のプログラムは、消費税を 0.05 に変更した場合の先頭部分です。
消費税を 0.05 に変更
#define EXCISETAX 0.05 /* ここで定数を宣言 */
このプログラムを実行して、300を入力した場合の結果は次の通りになります。
実行結果
本体価格:300 (入力値)
税込価格:315
税込価格:315
この様に、定数を使うと数値の意味がわかりやすくなり、修正が容易になります。
文字列に名前をつける
#define疑似命令では、数値だけでなく、文字列にも名前をつけられます。
使い方は、数値の場合と同じですが、文字列には、当然""をつける必要があります。
次のプログラムは、プログラムの作者名を表示します。
このプログラムの実行結果は、次の通りになります。
ここでも、AUTHOR は "森口将憲" に置き換えられます。
もちろん、#define疑似命令の部分を変更すれば、すべての AUTHOR に影響します。
使い方は、数値の場合と同じですが、文字列には、当然""をつける必要があります。
次のプログラムは、プログラムの作者名を表示します。
ソースコード
#include <stdio.h>
#define AUTHOR "森口将憲"
int main(void)
{
printf("作者名:%s\n", AUTHOR);
return 0;
}
このプログラムの実行結果は、次の通りになります。
実行結果
作者名:森口将憲
ここでも、AUTHOR は "森口将憲" に置き換えられます。
もちろん、#define疑似命令の部分を変更すれば、すべての AUTHOR に影響します。
本サイトについて
苦しんで覚えるC言語(苦C)はC言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。




