プリプロセッサとは
プログラムをコンパイルする前に行う処理をプリプロセスと言い、プリプロセスを行う命令のことをプリプロセッサと言います。
C言語においては文頭に「#(シャープ)」をつけた命令がそれにあたります。
#includeはよく使う命令でしょう。指定したヘッダファイルに記述されているマクロや関数をそのソースコード内でも使えるようにします。
プリプロセッサはコンパイル前に処理を行うので、ソースコードの先頭に書かなければなりません。
#define
マクロ(定数)を定義するプリプロセッサです。
#define 【マクロ名】 【値】
のように書きます。
プリプロセッサは通常のC言語の命令ではないので、文末に「;(セミコロン)」はつけません。注意しましょう。
慣例的にマクロ名は大文字で書きます。
以下はC言語のコンパイラでデフォルトで定義されているマクロです。
文の前後に「_(アンダースコア)」が2つずつついています。
マクロ名 | 値 |
__DATE__ | コンパイル時の日付 |
__FILE__ | ソースコードのファイル名 |
__LINE__ | 呼び出された場所の行番号 |
__TIME__ | コンパイル時の時間 |
また、マクロには引数をつけることができます。
#define 【マクロ名】(引数) 【値】
引数や値のあるマクロですが、これらには型はありません。
プリプロセッサによってマクロ名を記述した部分が値に置き換えられ、その後コンパイルが始まりそこで型が決まります。
#if
if文はプリプロセッサでも使うことができます。
#if 【式】
から
#endif
の間をブロックとみなします。
間に
#else 【式】
を入れると#elseでがifのブロック、#endifまでがelseのブロックとなります。
#ifdef
#ifの中でも、あるシンボルが定義されているかどうかで分岐するのが#ifdefです。
#ifdef 【シンボル名】
#ifと同様に#else、#endifが使えます。
#pragma
OSやハードウェアに関する機能を提供するプリプロセッサです。
バージョン管理やメモリ領域の管理に使います。
#pragma once
はインクルードガードです。
複数のファイルをあわせて実行するとき、同一ヘッダファイルの重複インクルードを防ぎます。
ここで紹介しているのはプリプロセッサの機能の一部ですが、初心者はあまり使うものではないでしょう。