●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

C++のプリプロセッサディレクティブとは?#include や #define の意味と使い方

C++のプログラムでは、ソースコードの先頭や途中に #include#define などの プリプロセッサディレクティブ(プリプロセッサ命令) をよく見かけます。 これらはコンパイル前の準備処理を行う命令で、C/C++の基本的な仕組みのひとつです。

この記事では、代表的なプリプロセッサディレクティブとその使い方について、初心者向けにわかりやすく解説します。

プリプロセッサとは?

プリプロセッサ(Preprocessor)とは、ソースコードをコンパイルする前に行われる「前処理」のことです。 その処理を指示する命令がプリプロセッサディレクティブ(#で始まる命令)です。

主なプリプロセッサディレクティブ一覧

命令説明
#include他のファイルを読み込む
#define定数やマクロを定義する
#undef#define を解除する
#ifdef, #ifndef条件付きコンパイル(定義の有無で切り替え)
#if, #else, #elif, #endif条件付きコンパイル(式で切り替え)

#include の使い方

#include <iostream>   // 標準ライブラリの読み込み
#include "myheader.h" // ユーザー定義ヘッダーの読み込み

<> は標準ライブラリから、"" はプロジェクト内のファイルから読み込むという意味です。

#define の使い方

#define PI 3.14159

int main() {
    double area = PI * 2 * 2;
}

#define は定数や簡単なマクロの定義に使います。 値や処理の置換がコンパイル前に自動で行われるのが特徴です。

マクロの例

#define SQUARE(x) ((x) * (x))

注意点として、SQUARE(a + b) のような使い方ではかっこを忘れるとバグの原因になります。

#ifdef / #ifndef の使い方

条件付きコンパイルに使います。ヘッダーファイルの多重読み込み防止に必須です。

// myheader.h
#ifndef MYHEADER_H
#define MYHEADER_H

// ヘッダーの内容

#endif

#if / #else などの使い方

#define DEBUG 1

#if DEBUG
    cout << "デバッグモード" << endl;
#else
    cout << "リリースモード" << endl;
#endif

コンパイル時に特定のブロックだけ有効にしたい場合に便利です。

プリプロセッサディレクティブの注意点

  • 文法チェックはされない(文字列置換されるだけなのでミスしやすい)
  • 関数マクロは避ける:バグの温床になりやすいため、できればinline関数などで代替
  • define の多用に注意:可読性が落ちるので、定数には constconstexpr を使用推奨

まとめ

C++のプリプロセッサディレクティブは、ソースコードをコンパイル前に加工するための命令です。 #include#define#ifdef などを使いこなすことで、柔軟で効率的なコード設計が可能になります。

まずは #include#define から使い方を理解し、条件付きコンパイルなどにステップアップしてみましょう!

 

C++関連用語集

−−−−−  C++  −−−−−

C++のクラス(Class)とは?仕組みと使い方をわかりやすく解説!

C++のオブジェクト(Object)とは?クラスとの関係と役割をわかりやすく解説!

C++のコンストラクタ(Constructor)とは?役割と使い方をやさしく解説!

C++のデストラクタ(Destructor)とは?役割と使い方をやさしく解説!

C++の継承(Inheritance)とは?クラスを拡張する基本テクニック

C++の多態性/ポリモーフィズム(Polymorphism)とは?オブジェクト指向の真髄を解説!

C++のオーバーロード(Overload)とは?関数や演算子を便利に使い分けよう!

C++のオーバーライド(Override)とは?継承と仮想関数の正しい使い方

C++の仮想関数(Virtual Function)とは?ポリモーフィズムを実現する仕組みを解説!

C++の純粋仮想関数(Pure Virtual Function)とは?抽象クラスとの関係も解説!

C++の抽象クラス(Abstract Class)とは?使い方と役割をわかりやすく解説!

C++のテンプレート(Template)とは?型に依存しない汎用的な関数・クラスを作ろう!

C++の名前空間(Namespace)とは?名前の衝突を防ぐ便利な機能

C++の標準テンプレートライブラリ(STL)とは?効率的な開発に必須のライブラリ群

C++のベクター(vector)とは?配列より便利なSTLコンテナを使いこなそう!

C++のイテレータ(Iterator)とは?STLコンテナを自在に操作する鍵

C++の参照(Reference)とは?ポインタとの違いもわかりやすく解説!

C++のポインタ(Pointer)とは?メモリを操る強力な機能をやさしく解説!

C++の動的メモリ確保(Dynamic Memory Allocation)とは?newとdeleteを使いこなそう

C++のnew/delete演算子とは?動的メモリ確保の基本をマスターしよう!

C++の例外処理(Exception Handling)とは?try/catch/throwでエラーに強いプログラムを作ろう

C++のtry/catch構文とは?例外処理の基本をやさしく解説!

C++のRAIIとは?リソース管理を自動化する重要な設計原則

C++の静的変数(static variable)とは?使い方・特徴・注意点をやさしく解説!

C++の関数ポインタ(Function Pointer)とは?使い方と活用例をわかりやすく解説!

C++のラムダ式(Lambda Expression)とは?書き方・使い方をやさしく解説!

C++のスマートポインタ(Smart Pointer)とは?自動で安全なメモリ管理を実現しよう!

C++のコンパイル(Compile)とは?仕組みと流れをわかりやすく解説!

C++のリンク(Link)とは?コンパイルとの違いとエラー対策を解説!

C++のプリプロセッサディレクティブとは?#include や #define の意味と使い方