MMGamesロゴ  MMGames
Twitterシェアボタン  Facebookシェアボタン   
しんで覚えるC言語
しんで覚えるC言語

不変の値の取り扱い

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

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

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

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

そこで、あらかじめ数値に名前をつけて、その名前を使うようにします。
名前をつけた部分を修正するだけで、すべての数値が修正されますし、
名前で書かれていれば、ただの数値よりも意味がわかりやすくなります。
数値に名前をつける
C言語には、数値に名前をつける方法が用意されています。
それが、#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

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

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

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

消費税を 0.05 に変更
#define EXCISETAX 0.05 /* ここで定数を宣言 */

このプログラムを実行して、300を入力した場合の結果は次の通りになります。

実行結果
本体価格:300 (入力値)
税込価格:315

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

ソースコード
#include <stdio.h>

#define AUTHOR "森口将憲"

int main(void)
{
    printf("作者名:%s\n", AUTHOR);
    return 0;
}

このプログラムの実行結果は、次の通りになります。

実行結果
作者名:森口将憲

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


本サイトについて

苦しんで覚えるC言語(苦C)は
C言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。

第0部:プログラム概要編
  1. プログラムとは何か?
2章:プログラムの書き方
  1. 書き方のルール
  2. 書き方の慣習
  3. 練習問題2
3章:画面への表示
  1. 文字列の表示
  2. 改行文字
  3. 練習問題3
6章:キーボードからの入力
  1. 入力用の関数
  2. 入力の恐怖
  3. 練習問題6
9章:回数が決まっている繰り返し
  1. 繰り返しを行う文
  2. ループ動作の仕組み
  3. 練習問題9
10章:回数がわからない繰り返し
  1. 回数不明ループ
  2. 入力チェック
  3. 練習問題10
13章:複数の変数を一括して扱う
  1. 複数の変数をまとめて扱う
  2. 配列の使い方
  3. 練習問題13
20章:複数のソースファイル
  1. 最小限の分割
  2. 分割の定石
  3. 練習問題20

コメント
COMMENT

💬 コメント投稿欄を開く