エクリプスでc++のヘッダーファイルをつくると
毎回初期状態で下のコードが記入されています。
このコードの意味と必要性を教えてください
#ifndef PEOPLE_H_ #define PEOPLE_H_ #endif /* PEOPLE_H_ */ ド
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
これはインクルードガードと呼ばれるもので、ヘッダファイルが2重にインクルードされるのを防ぐためにあります。
ヘッダファイルはincludeと書いたところに機械的に展開されるので以下のような場合はvarが2回宣言されてしまいます。
インクルードガードはこれを防ぎます。
C
1// header1.h 2int var;
C
1// header2.h 2#include"header1.h" 3int func(){ 4 printf("this is func.\n"); 5}
C
1// main.c 2#include"header1.h" 3#include"header2.h" 4int main(int argc,char *argv[]){ 5 printf("hoge\n"); 6 func(); 7 return 0; 8}
C
1// includeの展開結果 2/* main.c の header1.hの展開結果 始まり */ 3int var; 4/* main.c の header1.hの展開結果 終わり */ 5 6/* main.c の header2.hの展開結果 始まり */ 7/* header2.h のheader1.hの展開結果 始まり */ 8int var; 9/* header2.h のheader1.hの展開結果 終わり */ 10int func(){ 11 printf("this is func.\n"); 12} 13/* main.c の header2.hの展開結果 終わり */ 14 15int main(int argc,char *argv[]){ 16 printf("hoge\n"); 17 func(); 18 return 0; 19}
投稿2015/11/02 14:48
総合スコア124
0
他の方の回答と同じような回答になりますが、そのコードの意味を併せて回答します。
目的
そのコードの目的は他の方が回答しているとおり「二重インクルードを防ぐ」ためのものです。
二重インクルードしてしまうとどうなるかはShotaKurodaさんの回答のとおりです。
コードの意味
ifndef <定数名>
は<定数名>の定数が宣言されていない(Not DEFined)のときにendif
までのコードを実行するものです。
一番最初のインクルードでは定数「PEOPLE_H_」が定義されていないため「PEOPLE_H_」をdefineしたあとにendif
までのコードを読み込みます。
二回目からのインクルードでは「PEOPLE_H_」が定義された環境で読み込まれるので、二重インクルードを防止しています。
以上がそのコードの意味、及び目的です。
投稿2015/11/03 14:25
総合スコア243
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。