複数ファイルでのプログラム開発を行う時、
ヘッダファイルのインクルードに注意する事があります。
ヘッダファイルには、関数のプロトタイプ宣言、#define定数、typedef定義などが
含まれていますが、ヘッダファイルの中で多数の
ヘッダファイルがインクルードされる場合、
#define定数定義やtypedef定義が重なる事が良くあります。
このような事が起こると、コンパイラが警告やエラーを出します。
これは、プログラムの保守性を下げます。
また、program1.hファイルとprogram2.hがあった場合、
program1.hでは、program2.hをインクルードしていて、
program2.hでは、program1.hをインクルードすると、
インクルードの無限ループが起こります。
この場合もコンパイラが警告やエラーを出します。
このような不具合を解決するための仕組みがインクルードガードです。
program1.h
#ifndef __PROGRAM1_H__
#define __PROGRAM1_H__
ヘッダファイルの中身
#endif
|
最初にprogram1.hのインクルードがあった場合、
__PROGRAM1_H__ が定義されていないので、__PROGRAM1_H__ が定義され、
ヘッダファイルの中身をインクルードします。
2回目以降のインクルードがあった場合には、
既に__PROGRAM1_H__が定義されているので、
ヘッダファイルの中身をインクルードしません。
__PROGRAM1_H__という名前は、それぞれのファイルで別の名前に定義します。
こういった仕組みがあれば、多重インクルードによる多重定義の心配がなくなります。
スポンサードリンク
|