![見出し画像](https://assets.st-note.com/production/uploads/images/38944336/rectangle_large_type_2_d200a7abcc034cf8a0aa6db15ae2d2bb.jpeg?width=1200)
Photo by
ilo
c言語のファイル分割|二重インクルードの防止
c++でファイル分割について勉強していて、前勉強したけどすっかり内容を忘れてしまったので、2重includeについてメモ代わりに書きます。
3つのファイルの構成:
・ヘッダーファイル
プロトタイプ宣言を記載
ファイル名:calc.hpp
・ソースファイル
main関数を書いたファイル
ファイル名:main.cpp
関数の定義を書いたファイル
ファイル名:calc.cpp
上記の構成で、それぞれのソースファイルがプロトタイプ宣言のファイルcalc.hppをインクルードする。
そのまま何もせずだと、それぞれのファイルがcalc.hppに書かれたプロトタイプ宣言をインクルードするので、プロトタイプ宣言の内容を2回定義することになり、同じ関数を2回定義することになり、エラーが発生する場合がある。
これを防止するために、ヘッダーファイルのプロトタイプ宣言が既に定義されていないかチェックするマクロを利用する。
例)
// ヘッダーファイルcalc.hpp
#ifndef _CALC_HPP_
#define _CALC_HPP_
// 関数のプロトタイプ宣言を記載
・・・
#endif
#ifndef _CALC_HPP_ →もし_CALC_HPP_が定義されてなかったら
#define _CALC_HPP_ で_CALC_HPP_を定義、プロトタイプ宣言の中身を実行
#ifndef _CALC_HPP_→もし_CALC_HPP_がすでに定義されていたら、#define _CALC_HPP_の行と具体的なプロトタイプ宣言の書かれた行をスキップして#endifに抜ける。
という動作をする。