私はヘッダファイルの最初にこのようなコードを見てきました。
#ifndef HEADERFILE_H
#define HEADERFILE_H
そしてファイルの最後には
#endif
これの目的は何ですか?
それらは #includeガードと呼ばれます 。
ヘッダーが含まれると、一意の値(この場合はHEADERFILE_H
)が定義されているかどうかを確認します。それが定義されていない場合は、それを定義してページの残りの部分に進みます。
コードが再度インクルードされると、最初のifndef
は失敗し、空のファイルになります。
これにより、型、列挙型、静的変数などの識別子の二重宣言を防ぐことができます。
#ifndef <token>
/* code */
#else
/* code to include if the token is defined */
#endif
#ifndef
は、与えられたトークンがファイル内またはインクルードファイル内のどちらかで#defined
以前であるかどうかをチェックします。存在しない場合は、最後の#else
との間のコード、または#else
が存在しない場合は#endif
ステートメントが含まれます。 #ifndef
は、ファイルがインクルードされたらトークンを定義し、そのトークンがそのファイルの先頭に設定されていないことを確認することによって、ヘッダーファイルを同数にするためによく使用されます。
#ifndef _INCL_GUARD
#define _INCL_GUARD
#endif
これにより、同じヘッダーファイルが複数回インクルードされるのを防ぎます。
#ifndef __COMMON_H__
#define __COMMON_H__
//header file content
#endif
このヘッダファイルを複数のファイルに含めたとします。そのため、初めて__COMMON_H__が定義されていないときは、定義されヘッダファイルがインクルードされます。
次回は__COMMON_H__が定義されているので、二度とインクルードされません。