ページ 11

多重インクルード防止

Posted: 2014年4月02日(水) 17:53
by ミヤビ
初投稿のC言語初心者です
今回、質問したいのはC言語の基礎中の基礎で申し訳ないのですが
「多重インクルード防止」です

先日、ここの副管理人でもあるソフト屋様制作のRPG講座を拝見させていただいたのですが
その際、講座に登場した多重インクルード防止の説明がよく理解できませんでした

講座では各ヘッダファイルの最初で#defineを使い文字列を定義して
#ifndefにより二回目からはそのヘッダファイルの処理を飛ばしていました

ここで疑問が生まれました
講座では上記の方法で多重インクルードを防止しているはずのヘッダファイル(ここでは例えばmain.hとします)が
あったのですが様々なソースファイルで「#include "main.h"」の記述を見受けられました
多重インクルードを防止していれば、いくつ「#include "main.h」の記述をしても
そのヘッダファイルの中身の処理は飛ばされてしまうので無意味だと思います

C言語の先輩方からしたら余りにもお粗末な質問かもしれませんが困っております
どうかご教授の程、よろしくお願いします

質問に当たり、ソフト屋様制作のRPG講座を例にとらせていただきました
申し訳ありませんでした

Re: 多重インクルード防止

Posted: 2014年4月02日(水) 17:58
by ミヤビ
すいません 何が知りたいのか詳しく書いていませんでした
多重インクルードは防止されているはずなのに
いくつもインクルード命令を記述していてどういう意味なのかが知りたいです

Re: 多重インクルード防止

Posted: 2014年4月02日(水) 18:05
by ISLe
C言語は、(ヘッダファイルとの対比としての意味で)ソースファイルごとにコンパイルします。

多重インクルード防止は、ひとつのソースファイルをコンパイルするときに、ヘッダファイルが繰り返し展開されるのを防ぐ仕組みです。
ひとつのソースファイルをコンパイルするとき、その都度、必要なヘッダファイルはインクルードされなければいけません。

Re: 多重インクルード防止

Posted: 2014年4月02日(水) 18:15
by ミヤビ
なるほど
同じソースファイルに展開されるのを防ぐ意味だったのですか
勉強になりました ご教授感謝いたします
ありがとうございました