C++
 Computer >> コンピューター >  >> プログラミング >> C++

C/C++の#include と#include "filename"の違いを徹底解説

C/C++プログラミングにおいて、ヘッダーファイルを読み込む際に使われる#includeディレクティブには、#include <filename>#include "filename"という2つの記述形式があります。一見似ているこの2つですが、その違いはプリプロセッサがインクルード対象のファイルを検索する場所にあります。

#include <filename> の場合

山括弧(< >)で囲んだ形式では、プリプロセッサは実装依存の方法でファイルを検索します。具体的には、コンパイラがあらかじめ設定している標準インクルードディレクトリ(システムのヘッダーファイルが格納されたディレクトリなど)の中から対象ファイルを探します。

この形式は、標準ライブラリのヘッダーファイルをインクルードする際に一般的に使用されます。

#include <stdio.h>
#include <stdlib.h>
#include <string>

#include "filename" の場合

ダブルクォーテーション(" ")で囲んだ形式では、プリプロセッサはまずそのディレクティブが記述されているファイルと同じディレクトリ内を検索します。そこでファイルが見つからなかった場合は、#include <filename>形式と同じ動作に切り替わり、コンパイラが指定したディレクトリの検索へと移行します。

この形式は、開発者自身が作成したヘッダーファイルをインクルードする際に一般的に使用されます。

#include "myheader.h"
#include "utils/config.h"

使い分けのポイント

一般的なガイドラインとして、以下のように使い分けるのが推奨されます。

  • 標準ライブラリや外部ライブラリのヘッダー → #include <filename>
  • プロジェクト内の自作ヘッダー#include "filename"

この使い分けにより、コードの意図が明確になり、意図しないファイルが読み込まれるリスクも減らせます。また、ビルドの検索パス設定を整理する際にも、どちらの形式を使っているかが重要な手がかりになります。

まとめ

両者の違いを簡単にまとめると、#include <filename>はコンパイラが指定したディレクトリのみを検索するのに対し、#include "filename"はまずカレントディレクトリを検索し、見つからなければ山括弧形式と同じ検索を行う、という点です。適切に使い分けることで、可読性が高く保守しやすいコードになります。

  1. DirectX11とDirectX12の違いを徹底解説!ゲーマーが知っておくべきポイント

    DirectXは、ソフトウェアがマルチメディアコンテンツを描画し、グラフィックハードウェアと通信するために使用されるAPI(アプリケーションプログラミングインターフェース)のコレクションです。DirectXの主要な構成要素であるDirect3Dは、ソフトウェアとグラフィックスハードウェア間の通信を担っています。ハードウェアは製品ごとに異なるため、標準化された関数や呼び出しのライブラリを通じてグラフィックカードと通信することで、ゲーム開発を大幅にスピードアップできます。これは「ハードウェア抽象化」と呼ばれ、APIの最も重要な役割となっています。車に例えてみましょう。1台の車の運転ができれば、ほぼ

  2. C#のListとIListの違いとは?インターフェースと具象クラスの使い分けを解説

    C#におけるListとIListの主な違いは、Listがインデックスでアクセスできるオブジェクトのリストを表す「クラス(具象型)」であるのに対し、IListは同じくインデックスでアクセス可能なオブジェクトのコレクションを表す「インターフェース」であるという点です。IListインターフェースは、ICollectionとIEnumerableという2つのインターフェースから派生しています。ListとIListはどちらもオブジェクトの集合を扱うために使用され、整数や文字列などさまざまな型のオブジェクトを格納できます。また、要素の挿入・削除・検索・並べ替えを行うためのメソッドも共通して提供されています