C/C++

プリプロセッサ

更新日:

プリプロセッサとは

プログラムをコンパイルする前に行う処理をプリプロセスと言い、プリプロセスを行う命令のことをプリプロセッサと言います。

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


はインクルードガードです。
複数のファイルをあわせて実行するとき、同一ヘッダファイルの重複インクルードを防ぎます。

ここで紹介しているのはプリプロセッサの機能の一部ですが、初心者はあまり使うものではないでしょう。



-C/C++

Copyright© ツナのエンジニアブログ , 2024 All Rights Reserved Powered by AFFINGER5.