#ifndef ~ #endif とは
ヘッダファイルに#ifndefと#endifというものが登場してきたので、何者なのか整理しておく
#ifndef ~ #endif とは
条件コンパイル とは
なぜ重複定義を回避しなければならないか
- 1つのプログラムで、2回以上同じ宣言をしてはいけないため
ヘッダファイルでの条件コンパイル(#ifndef ~ #endif)
ヘッダファイルで条件コンパイルを使う理由
1つのプログラムで、あるcppファイルがHoge.hをインクルードし、
別のcppファイルが同じヘッダファイルをインクルードすると、同じ宣言を2回していることになってしまう
そこで、条件コンパイルを使用し、重複定義を回避する
使い方、意味
記号定数の定義とソースコードを挟む
#ifndef INCLUDE_Hoge_h_ #define INCLUDE_Hoge_h_ //処理 #endif
記号定数「INCLUDE_Hoge_h_」の名前は任意だが、ヘッダファイル名と同じにしておくとわかりやすい
「ifndef」とは、if(もし)、not(されていない)、def(define定義)というもので、
「もし、define定義がされていなければコンパイルする」という意味になる
プリプロセス~コンパイル時の動き
また、#defineによりINCLUDE_Hoge_h_が定義される
#ifndefにより、#defineと処理部分はコンパイルされない
その他の条件コンパイル
ifndefと逆の動きをするifdefもある
詳しくは以下でわかりやすく説明されている
https://monozukuri-c.com/langc-ifdef/#toc10
参考
▼【C/C++】ヘッダーファイルの#ifndef ~ #endifの意味
https://www.kinjo-u.ac.jp/ushida/tekkotsu/cpp/ifndef.html
▼条件コンパイルによる重複定義の回避