==補足==
//xx01.h の内容は以下の通り。
#ifndef _X01_EXT
#define _X01_EXT
extern void xx01_func1(void); /* 実体とプロトタイプ宣言は xx01.c に記載 */
extern void xx01_func2(void); /* 実体とプロトタイプ宣言は xx01.c に記載 */
extern void xx01_func3(void); /* 実体とプロトタイプ宣言は xx01.c に記載 */
extern void xx01_func4(void); /* 実体とプロトタイプ宣言は xx01.c に記載 */
#endif
//xx02.h の内容は以下の通り。
#ifndef _X02_EXT
#define _X02_EXT
extern void xx02_func1(void); /* 実体とプロトタイプ宣言は xx02.c に記載 */
extern void xx02_func2(void); /* 実体とプロトタイプ宣言は xx02.c に記載 */
extern void xx02_func3(void); /* 実体とプロトタイプ宣言は xx02.c に記載 */
extern void xx02_func4(void); /* 実体とプロトタイプ宣言は xx02.c に記載 */
#endif
: 以下 xx75.hまで 同様。
ここで、各々の .cファイルから、すべての.hファイルをインクルードしようとすると
#include "xx01.h"
#include "xx02.h"
:
:
#include "xx75.h"
となるが、この部分を更に allinc.h というヘッダファイルにしてしまって
各 .cファイルからは、冒頭で
#include "allinc.h"
としてしまえば楽ちんかな、と思った。
ですが、この場合、例えば
xx01.c 内で定義している関数のprototypeが、インクルードしたextern宣言と重複してしまうことになります。
#ifndef をうまく使って 実体を定義したファイルに限っては重複するexternを無効にするようにできるのではないかと思うのですが、詳しい方教えていただけないでしょうか。
もしくは、そもそもそんな構造にしなくても、こうすればいいよ的なご提案でもOKです。
うまくやれば、extern宣言とprototype宣言を一つのhにまとめたりできるのでは?
とかも考えてみたりしてますが、ちょっと混乱してきた… <(*_*<
何卒宜しくお願い致します。
▽1
●
POGPI ベストアンサー |
#define _X01_EXT
を、xx01.cファイルの
#include "allinc.h"
の前に書くのは、どうですか。2以降も同様に。
こんな感じかなぁ。
#ifdef __XX01_C #define _EXTERN #else #define _EXTERN extern #endif _EXTERN void xx01_func1(void); _EXTERN void xx01_func2(void);
#define __XX01_C #include "xx01.h"
ただ、Linux 上のヘッダファイルとかをちらっとみた感じだと、プロトタイプ宣言に extern を付けないのが普通ですね。