web-dev-qa-db-ja.com

C++ヘッダーファイルで#ifndefと#defineが使用されるのはなぜですか。

私はヘッダファイルの最初にこのようなコードを見てきました。

#ifndef HEADERFILE_H
#define HEADERFILE_H

そしてファイルの最後には

#endif

これの目的は何ですか?

406
Asad Khan

それらは #includeガードと呼ばれます

ヘッダーが含まれると、一意の値(この場合はHEADERFILE_H)が定義されているかどうかを確認します。それが定義されていない場合は、それを定義してページの残りの部分に進みます。

コードが再度インクルードされると、最初のifndefは失敗し、空のファイルになります。

これにより、型、列挙型、静的変数などの識別子の二重宣言を防ぐことができます。

448
LiraNuna
#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
29
Roy

これにより、同じヘッダーファイルが複数回インクルードされるのを防ぎます。

#ifndef __COMMON_H__
#define __COMMON_H__
//header file content
#endif

このヘッダファイルを複数のファイルに含めたとします。そのため、初めて__COMMON_H__が定義されていないときは、定義されヘッダファイルがインクルードされます。

次回は__COMMON_H__が定義されているので、二度とインクルードされません。

7
Sandeep_black