はじめて書き込みます、SINTAKAと申します。
4年程Javaでプログラミングを行っていましたが、最近C/C++に興味を持ち、
色々と勉強をしているところです。
さて、ヘッダファイルを二重読み込み防止するために、ヘッダファイル
全体を#ifndef 〜 #endifで囲う手法(以下include guardと呼びますね)
があるかと思いますが、うまく機能していないことに気付きました。
例えば、以下に示す3つのファイルはリンカにglobalFunc()の多重定義が
あるというエラーによりリンクしてもらえません。
include guradeの使い方を勘違いしているのだと思いますが、どこを
勘違いしているか、ご教授いただけないでしょうか?
コンパイラ環境は、UNIX(solaris)のSUN WorkShopとGNU C(gcc)
です。
----GlobalFunc.h----
/*
globalFunc()を定義・実装しているヘッダファイル。
*/
#ifndef _GlobalFunc_h_
#define _GlobalFunc_h_
void globalFunc(){}
#endif
----EOF----
----UseGlobalFunc.c----
/*
globalFunc()を利用するファイル。ここではinclude一行。
*/
#include "GlobalFunc.h"
----EOF----
----Main.c----
/*
globalFunc()を利用する二つ目のファイル。
2回目の #include "GlobalFunc.h"は読まれないはずだが?
*/
#include "GlobalFunc.h"
main() {}
----EOF----
|