dポイントプレゼントキャンペーン実施中!

プログラム例を見ていたら
----- main.c -----
#include aaa.h  (1)

----- aaa.h -----
#include aaa.h (2)

とありました。
(1)はわかるのですが、
aaa.hで、また(2)、自分自身を#includeするのはなぜか
教えてください。

A 回答 (4件)

#1です



どちらもダブルクォートですか。#2様の仰ることが正解なら話ここまでですが、私の経験上では、自身を再帰的にインクルードするような場合は記憶にないのでチョット気になります。

コンパイルスイッチで何かしらの処理を行うにしても、自身を再帰的に呼び出してってのは意味があるようには思えません。
単にトリッキーなことがしたいだけとかなら分かるのですが...

確認ですが、aaa.h自体はひとつしか存在しないのですか?別のパスにaaa.hが存在してたりしませんか?
> aaa.hで、また(2)、自分自身を#includeするのはなぜか
とあるのですが、実はMakefileの設定等で別のaaa.hをインクルードしてるってことはないですか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

#include aaa.h (2)
を削除しても動作に変化はありませんでした。

お礼日時:2012/05/18 18:53

#3です


> #include aaa.h (2)
> を削除しても動作に変化はありませんでした。
この情報は役に立たないです。
動作に影響ないのは、ファイル内に書かれたコードは使用されていないってだけの話ですよね。

今回の質問は、自分自身をインクルードするのはなぜかってことでしたよね。

ちなみに、#3で書いた「確認ですが~」に対しての回答は頂けませんか?

一応、試験的に再帰的にインクルードするコードを書いてビルドしたところ下記のエラーが出ました。
<ここから>
In file included from aaa.h:1,
from aaa.h:1,
from aaa.h:1,
from aaa.h:1,
from aaa.h:1,
: 省略
from aaa.h:1,
from aaa.h:1,
from aaa.h:1,
from aaa.h:1,
from aaa.h:1,
from main.c:1:
aaa.h:1:17: error: #include nested too deeply
<ここまで>
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

話が私のレベルを越えた内容になってきました。
人のサンプルがどうあれ、自分で書くプログラムは
自分のレベルで自分にわかりやすく書きたいと思います。

お礼日時:2012/05/20 11:57

インクルードファイルの再帰呼び出しはたまにあります。



無限回の再帰飛び出しを防ぐために
>#include aaa.h (2)
の前後に
#if ...
#endif
があるはずです。

----- main.c -----
#include "aaa.h"

----- aaa.h -----
#ifndef AAA
#define AAA 111
#include "aaa.h"
#undef AAA
#define AAA 222
#include "aaa.h"
#undef AAA
#else
;
;
;
#endif
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>#include aaa.h (2)
>の前後に
>#if ...
>#endif
>があるはずです。
ありませんでした。
また、
#include aaa.h (2)
をコメントアウトしても動作に変化ありませんでした。

お礼日時:2012/05/18 18:50

コーディングミスではないんですよね。



その前に、インクルードのところはどちらも同じ表記でしたか?
「#include <aaa.h>」と「#include "aaa.h"」は、異なるファイルを指す事ができます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>コーディングミスではないんですよね。
市販キットのサンプルプログラムなのでプロが書いたものと思うんですが。

>異なるファイルを指す事ができます。
どちらも"aaa.h"です。

お礼日時:2012/05/18 09:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!