画像(logo)

HOME/[C言語 入門]小学生でもわかるC言語3 目次/九日目 プリプロセッサ

広告

[C言語 入門 小学生でもわかるC言語3]
九日目 プリプロセッサ

広告

↓発売日:2018年09月22日↓

たった1日で基本が身に付く! C言語 超入門

新品価格
¥2,225から
(2018/10/8 23:10時点)

目次へ戻る

プリプロッセッサ

先にも説明しましたプログラムの冒頭に書く「#include 〜」や「#define 〜」などなど、この「#〜」から始まるものを正式にはプリプロセッサと言いC言語の命令というよりかはコンパイラに指示を与えるものになります。

今回はその中の「#define 〜」に焦点を当ててみたいと思います。

定数に名前をつける

定数っていうのは定まった数、決まった数とかそんな数の事です。

プログラムでいうと基本的にプログラム中では変更しない数字の事になります。

「基本的にプログラム中では変更しない数字」というトコロが変数との違いです。

ゲームでいうなら、ゲームフィールドの大きさとか、最大の敵出現数とか・・・。

「#define 〜」を使うとそんな数字に名前を付ける事できます。

まずは次のプログラムを実行してみてください。

/*九日目 プログラム1*/
#include <stdio.h>
#define COUNT_MAX 10

int main(){
	int count = 0;
	int ans = 0;
	
	for(count = 0;count <= COUNT_MAX;count++){
		ans = ans + count;
	}

	printf("ans = %d\n", ans);	

	return 0;
}

■実行結果■

画像(ci_9_1)

数字を順番に1+2+3・・・10まで足していくプログラムです。

次の部分にご注目ください。

#define COUNT_MAX 10

ここで名前を付けてます。

「COUNT_MAX」は数字の「10」ですよという意味です。

#define 名前 数字

こんな感じですね。

名前を付ける時は大文字にするのがお約束らしいです。

「#define 〜」はプログラムのどこに書いても大丈夫ですが、基本的にはわかりやすいようにプログラムの先頭にまとめて書きます。

そしてこれを使う時は

for(count = 0;count <= COUNT_MAX;count++)

プログラム中にそのまま書くだけであとはコンパイルする時に自動的に元の数字に戻してくれるというワケです。

変更しやすく読みやすい

これで定数に名前をつける事はできました。

だからどうしたという話ですが、プログラムの骨組みのような部分でこれを上手に使うと大きな変更に対応しやすいプログラムができます。

たとえばさきほどのプログラムを「1〜100」まで計算させるプログラムに変更したいとします。

今までは目的の「for」文まで目を通す必要がありました。

しかし今回は!

#define COUNT_MAX 100

そう、こちらの部分を変えるだけで済んでしまうというワケなんですね!

先頭に書いてあるので探す必要もありません。

さらに名前をつけてあるのでプログラムの中身を見た時にも見やすくなります!

広告

流れを分ける

「#define」のまた違った使い方をご紹介します。

「#define」と「#ifdef」というのを使って大きな意味でのプログラムの流れを作る事ができます。

/*九日目 プログラム2*/
#include <stdio.h>
#define CASE_1

int main(){

	#ifdef CASE_1
		printf("ケース1を実行します。\n");
	#endif


	#ifdef CASE_2
		printf("ケース2を実行します。\n");
	#else
		printf("ケース2「else」を実行します。\n");
	#endif		


	return 0;
}

■実行結果■

画像(ci_9_2)

先頭の「#define」に注目です。

#define CASE_1

ここの部分にいつものように数字がありませんね。

これがどのような意味になるのかと言いますと、

「CASE_1」を「#define」しました!

という意味になります。

ではこれを使ってなにができるのかと言いますと、

「もし、CASE_1がdefineされていれば、されていなければ」

みたいに簡易な条件文のようなものを作る事ができます。

続きを見てみます。

#ifdef CASE_1
	printf("ケース1を実行します。\n");
#endif

なんとなく想像はつくかと思われますが、「#ifdef 〜」が 〜がdefineされていればという意味になります。

defineされていた場合は「#endif」までの内容が実行されます。

なので「#endif」までがセットになります。

さらに続きを見てみます。

#ifdef CASE_2
	printf("ケース2を実行します。\n");
#else
	printf("ケース2「else」を実行します。\n");
#endif	

今度は「CASE_2」がdefineされていればという条件にしてみました。

実行結果を見てもわかるように「CASE_2」の後の内容は実行されていないのが確認できるかと思います。

そしてその後の「#else」、これがそうではない場合という意味ですね。

この場合は「CASE_2」がdefineされていないので、こちらの部分が実行されるというワケです。

この「#ifdef」「#else」「#endif」などはプログラムでエラーが発生した場合、または発生しそうな場合などにエラーの原因となりそうな場所だけを分離したり、複数のソースファイルに分割した時の2重include防止(後ほどご紹介します)などに使われます。

もし最初からdefineされていなければという書き方をしたい場合は

#ifndef CASE_1
	printf("ケース1を実行します。\n");
#endif

「#ifndef 〜」というように書けばdefineされていない場合はという意味になります。

「#define」を解除する

/*九日目 プログラム3*/
#include <stdio.h>
#define CASE_1

int main(){

	#ifdef CASE_1
		printf("ケース1を実行します。\n");
	#endif

	#undef CASE_1

	#ifdef CASE_1
		printf("ケース1を実行します。\n");
	#endif

	return 0;
}

■実行結果■

画像(ci_9_3)

「define」したものを途中で解除したい場合は「#undef」というのを使います。

#undef CASE_1

これで「define」されていたものが無効になるのでその後の条件文は実行されていないのが確認できますね。

次回は変数そのものに別名をつけたいと思います。

次回

十日目 変数に別名をつける(準備中)

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓発売日:2016年02月29日↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

新品価格
¥2,462から
(2018/10/8 23:25時点)

↓発売日:2018年06月22日↓

スッキリわかるC言語入門

新品価格
¥2,916から
(2018/10/8 23:15時点)

↓発売日:2018年03月09日↓

C言語本格入門 ~基礎知識からコンピュータの本質まで

新品価格
¥3,218から
(2018/10/8 23:16時点)

↓発売日:2017年06月14日↓

やさしいC 第5版 (「やさしい」シリーズ)

新品価格
¥2,700から
(2018/10/8 23:17時点)

↓発売日:2018年05月21日↓

作って身につく C言語入門

新品価格
¥2,462から
(2018/10/8 23:18時点)

↓発売日:2017年12月07日↓

新・標準プログラマーズライブラリ C言語 ポインタ完全制覇

新品価格
¥2,678から
(2018/10/8 23:19時点)

↓発売日:2017年02月08日↓

新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ)

新品価格
¥2,700から
(2018/10/8 23:20時点)

↓発売日:2017年09月26日↓

かんたん C言語 [改訂2版] (プログラミングの教科書)

新品価格
¥2,916から
(2018/10/8 23:22時点)