多重インクルード防止

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ミヤビ

多重インクルード防止

#1

投稿記事 by ミヤビ » 10年前

初投稿のC言語初心者です
今回、質問したいのはC言語の基礎中の基礎で申し訳ないのですが
「多重インクルード防止」です

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

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

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

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

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

ミヤビ

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

#2

投稿記事 by ミヤビ » 10年前

すいません 何が知りたいのか詳しく書いていませんでした
多重インクルードは防止されているはずなのに
いくつもインクルード命令を記述していてどういう意味なのかが知りたいです

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#3

投稿記事 by ISLe » 10年前

C言語は、(ヘッダファイルとの対比としての意味で)ソースファイルごとにコンパイルします。

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

ミヤビ

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

#4

投稿記事 by ミヤビ » 10年前

なるほど
同じソースファイルに展開されるのを防ぐ意味だったのですか
勉強になりました ご教授感謝いたします
ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る