2017-01-15 3 views
2

「ICT_TOOLS_H__」とは何ですか?ヘッダーはここで定義していますか?それともブール値ですか、1または0のintですか?名前はヘッダーファイルと同じでなければならないのでしょうか、カスタム名にすることはできますか?また、ヘッダーが複数の.cppファイルに含まれている場合は#ifndefを使用しますか、または1回だけ#includedにしても使用する必要がありますか?コンパイラが初めて実行するとき、 "ICT_TOOLS_H__"が定義され、それを通過するたびにヘッダを再コンパイルせず、同じヘッダの複数のコンパイルを防止しますか?#ifndefを使用するときに特に定義されているものは何ですか?

#ifndef ICT_TOOLS_H__ //my proff said to start the name with "ICT_", its the programming department 
#define ICT_TOOLS_H__ 


//implementation goes here 

#endif 
+1

これらはガードを含みます。参照:https://en.wikipedia.org/wiki/Include_guard –

+0

これは前処理トークンです。 "プリプロセッサ"を参照してください。 –

答えて

1

ないことは、このマクロが条件が成功したように定義されておらず、コンテンツはソース/ヘッダ(付属)に添加され、常に第1および第2の時間内になるようinclusion guard条件含めるために使用されるマクロです条件は失敗し、コンテンツは再び追加されません。

これは、ヘッダーを2回以上含めることができる複数のソース/ヘッダーファイルを持つ場合に便利です。

//header.h 

#ifndef MY_HEADER_H // the name can be anything 
#define MY_HEADER_H 
// code here (some declarations) 

int value; 

#endif 

//source.cpp 

#include "header.h" 
#include "header.h" 

int main() 
{ 
    value = 0; // for example 

    return 0; 
} 

あなたが包含ガードを削除する場合は二つの変数valueがあり、それは、コンパイル時エラー(再定義)である結果として、それではheader.hの内容は二回追加されます。

+0

そのため、複数回インクルードされていることが分かっている場合は#ifndefを使用してください。それとも#ifndefを使用するのがより良い方法でしょうか? – Selim

+0

ヘッダファイルに 'inclusion guard 'を使うことをお勧めしますが、ヘッダーの先頭に追加するプリプロセッサディレクティブ' #pragma once'があります。これで内容は一度しか追加されません。しかしプラグマはありませんポータブル。 – Raindrop7

+1

あなたが常に知っておくべきことは、インクルードガードマクロを '_'で始めるのを避けるか、' #define _WIN32'のようなシステムのマクロの1つを使用することです – Raindrop7

0

これらは基本的にマクロであり、条件付きコンパイルに使用されます。 これは、コンパイルの最初のチェックを行う方法です。ケースで呼び出された定義済みのマクロがある場合ICT_TOOLS_H__定義されていない場合、#ifndefと#endifの間のコード全体がコンパイルされ、それをもう一度コンパイルしないように注意します。

コードが複数回コンパイルされると、C++の1つの定義ルールに違反します。ここをクリックhttps://en.m.wikipedia.org/wiki/One_Definition_Ruleを参照してください。

関連する問題