1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【VisualStudio2022】【C++】プリコンパイル済みヘッダーを必ずインクルードさせる

1
Last updated at Posted at 2025-12-11

「このソース、#includeが書かれていないのにちゃんと動いている…?」
そんな不思議なコードを見たことはありませんか。
実はそういったコードには強制インクルードという機能が隠れているのです。
強制インクルードを使うと、プロジェクト全体で共通のヘッダを自動的に適用できるため、ソースコードを簡潔に保ちつつ、漏れなく必要な定義を読み込ませることができます。
本記事ではVisualStudio2022強制インクルードを行う方法を紹介し、プリコンパイル済みヘッダ (PCH)との相性や注意点についても解説していきます。

前提知識

  • VisualStudio2022の基本の使い方を知っている
  • C++の基礎文法を理解している

想定環境

  • VisualStudio2022

強制インクルードとは

強制インクルードとは、C/C++のコンパイラに対して「すべてのソースファイルの先頭に必ず特定のヘッダを読み込ませる」ための仕組みです。
通常は各ソースファイルで#includeを書く必要がありますが、強制インクルードを使うと 明示的に書かなくても自動的にインクルードされるため、プロジェクト全体で共通のヘッダを漏れなく適用できます。

セットアップ方法

上部GUIからプロジェクト->プロパティをクリックしてプロパティウィンドウを開きます。
スクリーンショット (160).png
ウィンドウ左から構成プロパティ->C/C++->詳細設定を開き、ウィンドウ右側から必ず使用されるインクルードファイルという場所に、強制インクルードしたいファイルの名前を追加します(本記事ではまずはテストでiostreamを追加してみます)。
スクリーンショット (161).png
追加したら、適用をクリックして変更を適用してください。
スクリーンショット (162).png
これでセットアップが完了したので、簡単に挙動を確認します。

iostreamを強制インクルードしてハローワールドを出力するサンプル

main.cpp
//------------------------------------------------------
//! @file	main.cpp
//! @brief	強制コンパイルのサンプルプログラム
//! @author つきの
//------------------------------------------------------
int main() {
	std::cout << "Hello, World!" << std::endl;
}
result
Hello, World!

出力することに成功しました。
強制インクルードの設定を行うことによって、ソースファイル内でiostream#includeしなくても、コンパイルが行えるようになりました。

PCHとの相性

強制インクルードは単体でも便利ですが、乱用すると依存関係が肥大化し、ビルド時間や保守性に悪影響があります。
プリコンパイル済みヘッダ (PCH)と組み合わせることで、「全ソースに共通ヘッダを必ず適用しつつ、コンパイル時間を短縮する」という二重の効果を得られます。
多くのファイルで使用するヘッダーに関してはPCHにまとめて、強制インクルードではPCHのみを指定する方法を推奨したいです。

PCHを強制インクルードしてみる

pch.hを強制インクルードしてコンパイルしてみます。
プリコンパイルについては先ほどの記事内で詳しく触れているため、そちらをご参照ください。

pch.h
//------------------------------------------------------------
//! @file   pch.h
//! @brief  プリコンパイル済みヘッダーファイル
//! @author つきの
//------------------------------------------------------------
#pragma once
#include <iostream> // 標準入出力
pch.cpp
//---------------------------------------------
//! @file	 pch.cpp
//! @brief  プリコンパイル済みヘッダーファイルを生成するためのソースファイル
//! @author つきの
//---------------------------------------------
#include "pch.h"
main.cpp
//---------------------------------------------
//! @file   main.cpp
//! @brief  メインソースファイル
//! @author つきの
//---------------------------------------------
//エントリポイント
int main() {
	//ハローワールドを表示
	std::cout << "Hello, World!" << std::endl;
	return 0;
}

必ず使用するインクルードファイルpch.hを指定します。
スクリーンショット (163).png

result
Hello, World!

こちらの方法であれば、今後ファイル数が増えたとしてもビルド時間が肥大化するといった問題をなくしつつ、ソースファイルでの記述を簡潔に保つことが出来ます。

総括

  • 強制インクルードは全ソースファイルに共通のヘッダを強制的に適用できる仕組み
  • Visual Studio2022ではプロパティ設定から簡単に強制インクルードを設定することが出来る
  • 簡潔な記述ができるようになる反面で、乱用はビルド時間や保守性に悪影響がある
  • プリコンパイル済みヘッダ (PCH)と組み合わせることで、共通ヘッダを必ず適用しつつ、コンパイル時間を短縮できる
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?