C/C++における #include と #include "filename" の違い
C/C++のプリプロセッサディレクティブである #include には、ヘッダファイルを指定する2つの記法があります。これらの根本的な違いは、プリプロセッサがファイルを探す場所(検索パス)にあります。
#include <filename>(角括弧)
システム標準のヘッダファイルをインクルードする際に使用します。
- プリプロセッサは、コンパイラがあらかじめ指定しているシステムインクルードディレクトリ(例:
/usr/include、Visual StudioのVC/includeなど)を検索します。 - 検索順序やディレクトリの場所は実装(コンパイラ/環境)依存です。
- 主に標準ライブラリ(
<stdio.h>、<vector>、<iostream>など)や、システム提供のヘッダを取り込むために使われます。
#include "filename"(二重引用符)
ユーザー定義(自作)のヘッダファイルをインクルードする際に使用します。
- まず、ディレクティブを記述しているソースファイルと同じディレクトリを検索します。
- そこで見つからない場合、
#include <filename>と同様にシステムインクルードディレクトリを検索します(フォールバック動作)。 - プロジェクト内で作成したヘッダファイル(
"myheader.h"など)を指定するのが一般的です。
使い分けの指針
| 記法 | 主な用途 | 検索の起点 |
|---|---|---|
#include <...> |
標準ライブラリ、システムヘッダ、サードパーティ製ライブラリ(システムにインストール済み) | コンパイラ指定のシステムパス |
#include "..." |
自作ヘッダ、プロジェクト内のヘッダ | ソースファイルのあるディレクトリ → システムパス |
なお、コンパイラのオプション(GCC/Clangの -I、MSVCの /I など)で追加のインクルードパスを指定した場合、それらは通常、二重引用符のフォールバック先および角括弧の検索対象に追加されます。
-
C/C++におけるstrncmp()とstrcmp()の違いを徹底解説
strncmp()とはstrncmp()は、指定された文字数まで左側の文字列と右側の文字列を比較するための関数です。基本的な動作はstrcmp()と同じですが、「比較する最大文字数」を引数で指定できる点が大きな特徴です。戻り値は以下のように決まります。比較した位置の文字同士がすべて等しい場合(または指定文字数内で差が出なかった場合):0左側の文字列の文字が、右側の対応する文字より大きいASCII値を持つ場合:0より大きい値左側の文字列の文字が、右側の対応する文字より小さいASCII値を持つ場合:0より小さい値C言語におけるstrncmp()の構文は次のとおりです。int strncmp(con
-
【C/C++】const int* と int* const の違いを徹底解説!宣言の読み方のコツも紹介
はじめに:constとポインタの組み合わせ C/C++では、「const」と「ポインタ」を組み合わせた宣言が複数存在し、それぞれ意味が異なるため、初心者がつまずきやすいポイントの一つです。この記事では、代表的な4つのパターンを整理し、何が変更できて何が変更できないのかを具体例とともに解説します。 4つの基本パターン int* // intへのポインタ int const * // constなintへのポインタ int * const // intへのconstポインタ int const * const // con