MMGamesロゴ  MMGames
Twitterシェアボタン  Facebookシェアボタン   
 English 

しんで覚えるC言語
しんで覚えるC言語

その他の方法による定数

const定数
前節では、#defineを使って定数を宣言する方法を説明しましたが、
C言語には、他にも定数を宣言する方法があります。
その1つは、const(コンスト)定数として宣言する方法です。

const定数とは、値を変更出来ない変数のことです。
変数を宣言する時、その先頭でconstを指定すると、
その変数は宣言時に代入された初期値を変更することが出来なくなります。
次のプログラムは、前節の消費税プログラムをconst定数に書き換えた例です。

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

int main(void)
{
    const double EXCISETAX = 0.05;
    int price;

    printf("本体価格:");
    scanf("%d", &price);
    price = (int)((1 + EXCISETAX) * price);
    printf("税込価格:%d\n", price);

    return 0;
}

実行結果は、前節とまったく同じになります。

constをつけて宣言された変数には代入ができません。

ソースコード
EXCISETAX = 0.03;

のような文を追加するとエラーとなります。それ以外は、通常の変数と同じように扱えます。

const定数は、定数として使う限りは#defineとほとんど同じです。
一般的には、定数を宣言する時には#defineを使用することがほとんどですが、
特定の関数の中だけで使用する定数を宣言したい時などには便利です。

定数を配列の要素数にする
C言語では、const定数を配列の要素数にできませんが、
C++やC99では可能になっています。
なお、#define疑似命令ならどちらでも可能です。


constの使い道
constは、他に関数の引数の型として使われることもあります。
これは、配列を渡す時に、その値を変更させないためです。

enum定数
C言語には、#defineやconstの他に、enum(エナム)定数があります。
enum定数の宣言の仕方は次の通りです。

enum定数
enum {
    名前,
    名前,
    名前
};

enum定数では、数値を指定する必要はなく(指定することもできる)、
名前だけで自動的に数値がつけられるので、大量の定数を宣言する場合に便利です。

自動的に数値がつけられるのでは、定数として利用出来ないようにも思えますが、
enum定数は、主にフラグ定数として使用されます。
たとえば、RPGゲームにおいて、キャラの状態を表す場合、

キャラの状態
0 正常
1 毒
2 マヒ
3 呪われ

のように番号をつけて区別する必要がありますが、これを直接数値で区別すると、
どれがどれだかわからなくなってとても不便です。
そこで、#define文を用いれば、

#defineの場合
#define STATE_NORMAL 0 /* 正常 */
#define STATE_POISON 1 /* 毒 */
#define STATE_NUMBLY 2 /* マヒ */
#define STATE_CURSE 3 /* 呪われ */

のようにして名前で表すことができるので、わかりやすくなります。
しかし、この場合、数値それ自体には意味がなく、ただ区別出来れば良いだけですから、
次のようにenumで自動的に番号を振らせた方が楽で良いのです。

enumの場合
enum {
    STATE_NORMAL, /* 通常 */
    STATE_POISON, /* 毒 */
    STATE_NUMBLY, /* マヒ */
    STATE_CURSE /* 呪われ */
};

この様に便利なenumですが、残念なことに、enumは整数値しか扱えません。
実数値を扱う場合には、#defineかconst定数にするしかありません。
また、文字列も扱えません。

最後の,
enumの名前の後につける,は、正式には最後の名前にはつけませんが、
実際にはつけても問題なく動作します。
したがって、次のように書くと、名前の追加や修正が楽になります。

enum {
STATE_NORMAL,
STATE_POISON,
STATE_NUMBLY,
STATE_CURSE, /* ここにも,がある */
};


数値指定enum定数
enum定数では、数値を省略できますが、必要であれば指定することもできます。
enum定数の宣言の仕方は次の通りです。

enumに数値を指定
enum {
    名前 = 数値,
    名前 = 数値,
    名前 = 数値
};

次は、数値を指定したenum定数の例です。

ソースコード
enum {
    ENUM_0,
    ENUM_1,
    ENUM_5 = 5,
    ENUM_6,
    ENUM_7,
    ENUM_9 = 9,
};

数値を省略した場合、1番先頭の名前を0として、以後は1ずつ増やした値がつけられます。
どこかで数値を指定した場合、そこは指定した数値、以後は1ずつ増やした値になります。
上の例では、先頭から、0,1,5,6,7,9、の順番に数値がつけられます。


本サイトについて

苦しんで覚える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

💬 コメント投稿欄を開く