« 等高線を制御 | トップページ | タイヤ交換 »

2008/11/18

インクルードガード

ヘッダーを複数インクルードするとき、例えばheader1.hppとheader2.hppがあって、header2.hppが間接的にheader1.hppをインクルードしていると、header1.hpp内で定義されていることが重複して定義されてしまい、コンパイルエラーを引き起こしてしまう。

これを防ぐためにはインクルードガードしておく必要がある。。(コンパイルエラーを引き起こすのはクラス定義の重複だけだと思うけど、それ以外の定義は重複してもいいからガードしないのか?それとも気持ち悪いからちゃんとガードしておくのか?)

具体的には次のようにするようだ。

#ifndef ___XYZ
#define ___XYZ

//定義を記述

#endif

XYZはもちろんヘッダーごとに違う名前にしておく。header1.hppなら___HEADER1_HPPみたいに。先頭にアンダースコア(_)を3つつけているのは、アンダースコア2つで始まる名前がC++に予約されているためだとか。

(___XYZの部分だけど、これを__XYZ__としているものも見かける。後ろにもアンダースコアを書く書かないというのに何か意味はあるのだろうか?)

|

« 等高線を制御 | トップページ | タイヤ交換 »

C++」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/222903/43161635

この記事へのトラックバック一覧です: インクルードガード:

« 等高線を制御 | トップページ | タイヤ交換 »