プリプロセッサディレクティブとは?初心者にやさしい解説ガイド共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
プリプロセッサディレクティブとは?初心者にやさしい解説ガイド共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)


プリプロセッサディレクティブとは何か

プリプロセッサディレクティブとは、ソースコードをコンパイルする前に動作する指示のことです。これらの指示は通常 ハッシュ記号 (#) で始まります。主に C/C++ などの言語で使われ、コードの配置や条件付きの処理を制御します。

代表的なディレクティブ

ディレクティブ説明
#include別のファイルをソースに取り込む。例: <stdio.h> など
#defineマクロを定義して、後で使えるようにする。
#ifdef / #ifndefマクロが定義されているかどうかで条件を分岐する。
#if / #elif / #else / #endif条件付きのコンパイルを実現する複雑な分岐。
#undef既に定義したマクロを未定義にする。
#pragmaコンパイラに特別な指示を出す。実装依存のことが多い。

例として次のような使い方があります。プリプロセッサディレクティブは画面上には現れず、コンパイル時に処理されます。条件付きでコードを切り替える例を見てみましょう。

例: #include <stdio.h> を使うと標準出力の関数が使えます。

マクロの定義の例です。マクロ定義 は次のようになります。 <span>#define PI 3.14 という形です。

条件付きコンパイルの例です。

#if defined(WINDOWS)

#include <windows.h>

#endif

注意点

プリプロセッサディレクティブはソースコードの見た目を変えませんが、コンパイルの挙動を変えます。 つまりプログラムの実行には直接影響しませんが、ビルド時の挙動に大きく影響します。

また、移植性の問題があります。異なるコンパイラや環境では解釈や動作が異なることがあるため、使い方には注意が必要です。

初心者がよくやるミスとして、マクロ名の衝突、セミコロンの付け方を忘れる、条件分岐の括弧を誤るなどがあります。これらはコードが正しく動かない原因になりやすいので、丁寧に確認しましょう。

まとめ

プリプロセッサディレクティブはプログラムを実行前に整える道具です。 使い方を理解しておけば、コードの再利用性を高めたり、プラットフォームごとの差を扱うのが楽になります。


プリプロセッサディレクティブの同意語

プリプロセッサディレクティブ
プリプロセッサが解釈する指示の総称。マクロの展開や条件付きコンパイル、ファイルの挿入など、プリプロセス段階で動作する命令を指します。
前処理ディレクティブ
同義の別表現。C/C++ などの前処理段階で解釈される指示で、include や define、条件分岐などを含みます。
前処理指示
前処理段階で実行される指示のこと。ファイルの取り込み・マクロ展開・条件付きのコード生成を指します。
プリプロセッサ命令
プリプロセッサが実行する命令のこと。コードの展開や条件判断、挿入といった処理を含みます。
プリプロセッサ指示
プリプロセッサに対して出す指示全般を指す表現。ifdef や include などが代表例です。
プリプロセス指示
前処理の段階で使用される指示の言い換え。ディレクティブとほぼ同義です。
条件付きディレクティブ
条件に応じてコードの有効/無効を切り替える指示。#if / #ifdef などが代表的な例です。
条件付きプリプロセ processorディレクティブ
条件に応じてプリプロセッサの動作を制御するディレクティブ。条件が満たされると特定のコードが展開・無効化されます。
マクロ関連ディレクティブ
マクロの定義・置換といったマクロ関連の操作を指示するプリプロセッサのディレクティブ群。#define や #undef などが含まれます。

プリプロセッサディレクティブの対義語・反対語

通常のコード
プリプロセッサディレクティブを必要とせず、コンパイラが直接解釈するC/C++の通常のソースコード。#include などの前処理指示は含まれず、実行時に動作する部分。
実行時コード
プリプロセスで処理されず、プログラムが実行される時に動作するコードのこと。ディレクティブではなく、ロジックを表すコード。
プリプロセス不要コード
プリプロセッサの段階を経ずに直接コンパイルされるコード。# や #define などの前処理指示を使わない、あるいは使っていてもディレクティブとして機能しないコード。
マクロを使わないコード
define で定義したマクロを使わず、実際の処理をマクロ展開に依存しないコード。
ディレクティブなしコード
プリプロセッサディレクティブが含まれていない、通常のソースコードの状態を指す表現。
直接コンパイルされるコード
プリプロセスを経ずにそのままコンパイラに渡され、通常のC/C++文として解釈されるコード。

プリプロセッサディレクティブの共起語

#define
マクロを定義するプリプロセッサディレクティブ。コード中の識別子を別の文字列や式に置換します。
マクロ
一度定義された文字列や式の置換ルール。プリプロセッサの核となる機能です。
#include
別のファイルを現在のファイルに挿入する指示。主にヘッダファイルを取り込む時に使います。
ヘッダファイル
宣言や定義をまとめたファイル。複数ファイルで共有する際に #include で読み込みます。
インクルードガード
ヘッダファイルが二度読み込まれるのを防ぐための仕組み。#ifndef 〜 define 〜 endif の組み合わせで実現します。
#if
条件付きでコードをコンパイルするか決める指示。ビルド設定に応じてブロックを有効化/無効化します。
#ifdef
指定したマクロが定義されている場合のみコードを有効化します。
#ifndef
指定したマクロが未定義の場合にコードを有効化します。
#elif
前の条件が偽のとき、別の条件を評価して別ブロックを実行します。
#else
前の条件がすべて偽のときに実行されるブロックを指定します。
#endif
条件付きブロックの終わりを示します。
#undef
既に定義済みのマクロを未定義にします。
#pragma
コンパイラに対して特別な指示を出すためのディレクティブ。実装依存です。
#line
プリプロセッサにファイル名と行番号を再設定させる指示。デバッグ情報に影響します。
#error
指定メッセージをエラーとして出力し、ビルドを停止させます。
#warning
警告メッセージを出力します。
条件付きコンパイル
条件式に基づいて特定のコードだけを有効化する仕組み。主に #if/ #else/ #endif で組みます。
マクロ展開
定義済みのマクロがソースコード内で実際の文字列に置換される過程。
トークン結合
マクロ展開時に ## 演算子を使って隣接トークンを結合します。
#region
エディタでコードを折りたたむ区域を定義するディレクティブ。特に C# などで使われます。
#endregion
region の終わりを示します。

プリプロセッサディレクティブの関連用語

プリプロセッサディレクティブ
ソースコードの前処理段階で解釈される指示の総称。行頭が # で始まるものが多く、マクロ定義・ファイル挿入・条件付き処理などを行います。
マクロ
コードの置換ルール。#define で新しく定義し、展開時にソース内の該当箇所を定義内容に置換します。
#define
新しいマクロを定義するディレクティブ。マクロ名と展開内容を指定します。
#undef
定義済みマクロを未定義にするディレクティブ。
#include
別のファイルの内容を現在のファイルに挿入するディレクティブ。引数にはダブルクォーテーション形式と尖括弧形式がある。
ヘッダファイル
関数宣言・型定義・マクロなどをまとめて提供するファイル。多くはヘッダファイル(.h)として用意され、#include で取り込まれます。
インクルードガード
二重に同じファイルを読み込むことを防ぐ仕組み。一般的には #ifndef <識別子> #define <識別子> … #endif で実装します。
条件付きコンパイル
特定の条件下でのみコードをコンパイルする機能。主に #if, #ifdef, #ifndef, #else, #elif, #endif を組み合わせて使います。
#if
条件を評価して対応するブロックを有効にするディレクティブ。
#ifdef
指定したマクロが定義されている場合にブロックを有効にします。
#ifndef
指定したマクロが未定義の場合にブロックを有効にします。
#elif
前の条件が偽のとき、別の条件を評価するディレクティブ。
#else
前の条件が成立しない場合に実行するブロックを指定します。
#endif
条件付きブロックの終わりを示します。
#pragma
コンパイラへ特定の指示を出すディレクティブ。実装依存的なことが多いです。
#error
コンパイル時にエラーメッセージを出力してビルドを停止させるディレクティブ。
#warning
コンパイラに警告を出す拡張ディレクティブ(コンパイラ依存のことが多いです)。
文字列化演算子
マクロの引数を文字列として展開する演算子 (#)。
トークン連結演算子
マクロの引数を別のトークンと結合して新しいトークンを作る演算子 (##)。
マクロ関数
引数を受け取るマクロ。関数のように呼び出して展開内容を生成します。
前処理ステージ
プリプロセッサがファイルを読み込み、マクロ展開・ファイル挿入・条件判断などを行う処理の段階。
インクルードパス
#include で検索されるディレクトリのリスト。コンパイラ設定で指定します。
#include の形式差
ダブルクォーテーション形式 ("file.h") は自ファイルのあるディレクトリを優先、尖括弧形式 () は標準ライブラリなどのディレクトリを優先して検索します。

プリプロセッサディレクティブのおすすめ参考サイト


インターネット・コンピュータの人気記事

awstatsとは?初心者でもわかる使い方と基本解説共起語・同意語・対義語も併せて解説!
16636viws
bing・とは?初心者のための基本ガイド:検索エンジンの仕組みと使い方共起語・同意語・対義語も併せて解説!
2997viws
差し込み印刷・とは?初心者でもすぐわかる使い方と仕組みガイド共起語・同意語・対義語も併せて解説!
1216viws
着信転送とは?初心者向けガイドで分かる使い方と設定のコツ共起語・同意語・対義語も併せて解説!
1191viws
7zファイル・とは?初心者でもわかる使い方と特徴を解説共起語・同意語・対義語も併せて解説!
1071viws
com端子・とは?初心者にも分かる基礎ガイド|シリアルポートの使い方と歴史を解説共起語・同意語・対義語も併せて解説!
1057viws
全角文字とは?初心者向け解説|全角と半角の違いをやさしく学ぶ共起語・同意語・対義語も併せて解説!
1046viws
充電アダプターとは何かを徹底解説|初心者でも分かる基本と選び方のコツ共起語・同意語・対義語も併せて解説!
994viws
リマインドメールとは?初心者にもわかる基本ガイドと使い方のコツ共起語・同意語・対義語も併せて解説!
879viws
pinロックとは?初心者が知っておくべき基本と使い方ガイド共起語・同意語・対義語も併せて解説!
878viws
16進数カラーコード・とは?初心者でもつまずかない基礎と使い方ガイド共起語・同意語・対義語も併せて解説!
827viws
none とは?初心者にもやさしく解説する意味と使い方ガイド共起語・同意語・対義語も併せて解説!
822viws
asp・とは?初心者向けに徹底解説する基本と使い方ガイド共起語・同意語・対義語も併せて解説!
819viws
xlsmとは?初心者でも分かるExcelのマクロ付きファイルの基本共起語・同意語・対義語も併せて解説!
762viws
ローカルポート・とは?初心者にも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
744viws
sha256とは?初心者が知るべき暗号ハッシュの基礎と使い道共起語・同意語・対義語も併せて解説!
719viws
csvダウンロードとは?初心者が今すぐ使える基本ガイド共起語・同意語・対義語も併せて解説!
639viws
ワンタイムコード・とは?初心者でも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
621viws
countifとは?初心者でもすぐ使える基本と応用ガイド共起語・同意語・対義語も併せて解説!
619viws
googleドキュメントとは?初心者が今日から使いこなす基本ガイド共起語・同意語・対義語も併せて解説!
551viws

新着記事

インターネット・コンピュータの関連記事