広告
↓発売日:2018年09月22日↓
新品価格 |
先にも説明しましたプログラムの冒頭に書く「#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; }
数字を順番に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; }
先頭の「#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されていない場合はという意味になります。
/*九日目 プログラム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; }
「define」したものを途中で解除したい場合は「#undef」というのを使います。
#undef CASE_1
これで「define」されていたものが無効になるのでその後の条件文は実行されていないのが確認できますね。
次回は変数そのものに別名をつけたいと思います。
広告
↓発売日:2016年02月29日↓
12歳からはじめる ゼロからのC言語 ゲームプログラミング教室 新品価格 |
↓発売日:2018年06月22日↓
新品価格 |
↓発売日:2018年03月09日↓
新品価格 |
↓発売日:2017年06月14日↓
新品価格 |
↓発売日:2018年05月21日↓
新品価格 |
↓発売日:2017年12月07日↓
新品価格 |
↓発売日:2017年02月08日↓
新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ) 新品価格 |
↓発売日:2017年09月26日↓
新品価格 |