マクロ

■マクロ

	C言語におけるマクロとは#から始まる1行のことで、#includeもマクロの一つです。
	マクロで書かれた内容はプリプロセッサと呼ばれる処理で使用されます。

■#if、#ifndef、#ifdef

	#if、#ifndef、#ifdefは条件を設定し、最後を#endifで閉じることで
	#if~#endifの範囲のコンパイルを行うかどうかを決めることができます。
	条件を満たした場合はコンパイル対象となり、
	満たさなかった場合はコンパイル対象から外されます。
	以下に各マクロの書式と具体例を記述します。

	●#if:
		#if書式例:
			#if 条件
				条件を満たしていたらコンパイル
			#endif

		#if具体例:
			#define DEBUG_PROC (1)

			#if DEBUG_PROC == 1
				// DEBUG_PROCの値が1ならコンパイル
			#endif

		※#ifの条件は整数かdefineで設定した値が使用できます。

	●#ifndef:
		#ifndef書式例:
			#ifndef 識別子
				識別子が定義されていなかったらコンパイル
			#endif

		#ifndef具体例:
			#ifndef _DEBUG_
				// _DEBUG_識別子が定義されていないならコンパイル
			#endif

	●#ifdef
		#ifdef書式例:
			#ifdef 識別子
				識別子が定義されていたらコンパイル
			#endif

		#ifdef具体例
			#define DEBUG
	
			#ifdef DEBUG
				// DEBUG識別子が定義されていたらコンパイル
			#endif

	●用途
		#ifndefはヘッダファイル使用時の多重定義を防ぐために使用されています。
		#if、#ifdefはテストやデバッグの処理を本番用の処理に
		反映させないようにするために使用されています。
		また、#ifは制御文のif文のように#elseif 条件、#elseなどを使用することで
		条件分岐を行うことができます。

■#define

	#defineは識別子と呼ばれる文字列を宣言するマクロです。
	識別子の後ろに値や文字列を指定するとプリプロセッサにて
	識別子の部分がそれらの内容に置換されます。
	以下は#defineの書式と具体例、使用例になります。
	
		書式例:
			#define 識別子 定義本体

		具体例:
			#define MYNAME "山田 太郎"

		使用例:
			#include <stdio.h>
			#define MYNAME "山田 太郎"

			void main(void)
			{
				printf("%s", MYNAME);
			}

			出力結果:
				山田 太郎

	このようにdefineで宣言した識別子を使用すると定義本体の内容に置換されて実行されます。
	書式からもわかると思いますが、#defineには「;」を使用しませんので気をつけてください。
	また、defineは通常の変数と区別するために識別子の名前は全て大文字を使用します。

	●defineの様々な宣言
		・識別子定義のみ
			定義本体を記述しなくても識別子を書くだけで
			その識別子を定義したことになります。

				書式例:
					#define 識別子

				具体例:
					#define _DEFINE_

		・引数つき
			識別子に引数を設定することができます。
			その引数を使用して関数のような挙動を行うことが可能です。

				書式例:
					#define 識別子(引数) 定義本体

				具体例:
					ADDSUM(x, y) (x + y)

				使用例:
					#define ADDSUM(x, y) ((x) + (y))
	
					void main(void)
					{
						printf("%d\n", ADDSUM(1, 2));
					}

					出力結果:
						3

			xとyを()で囲っているのは、引数の内容がそのまま置換されてしまうからです。
			()の有無で以下のような違いが出ますので気をつけてください。
			C_0049