こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

締切り済みの質問

ヘッダーの多重定義での疑問です。

 Cで開発をしているのですが、ヘッダーファイルでの定義ではたとえば、int a と
か double hoge とか定義して、そのヘッダーファイルを複数の cファイルが読み込むと多重定義になりますよね?
hoge.h
int a; // 多重定義
このヘッダーを複数の.cファイルに読み込む
しかし、自分のプロジェクトだと、ヘッダーファイルにint aとかdouble hogeとか
定義してもエラーにならないんです。
ただし、int b = 10;のように代入すると多重エラー

また、試しに新しくプロジェクトを作ってヘッダーで定義すると多重定義でエラーでした。

投稿日時 - 2017-10-09 12:21:00

QNo.9383748

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

>でもこのプロジェクトだけエラーがないです。
もしかして、ヘッダーがコンパイルされている?
私の方プリコンパイルヘッダーはあまり好きじゃないので、
常時OFFなんですが、確かVCってデフォルトでONだったような。
ONの時、ヘッダーはヘッダーだけでコンパイルされて、
何回includeしても、1回だけになることが、以前あったような。
(ずっとOFFにしてるので、記憶曖昧ですいません)
大規模なプロジェクトだと、ヘッダーがヘッダーを条件で
ロードしているので、コンパイル時間が遅くなるという判断の為に、
最初にヘッダーだけヘッダーが有効になるエリアだけを
事前に作ってしまう機能があり、これが邪魔でこちらOFFだったのですが。
確信はないのですが、設定のプリコンパイルヘッダーの使用を
いじってみると、エラーが出せるかもしれません。
しばらくC言語自体触ってないので、猛烈に見当違いの可能性もあり、
その時はスルーお願いします。

投稿日時 - 2017-10-13 11:41:17

お礼

返信ありがとうございます。
まさかここまで重要な意見がもらえるとは思えませんでした。
プリコンパイルヘッダーの設定が影響してるんですね。
ヘッダーがコンパイルされるということもあるんですね。
そこのところは勉強不足で分かりませんでした。

何回includeしても一回だけになるという機能を覚えておくようにします。

>大規模なプロジェクトだと、ヘッダーがヘッダーを条件で
ロードしているので、コンパイル時間が遅くなるという判断

う~ん、そういった事が可能なんですね・・・
眼からうろこ、自分も精進しようと思います。
自分はCは結構勉強している自負があったんですが、まだまだ広いんですね。 

投稿日時 - 2017-10-19 12:04:43

そもそも、ヘッダーに、
実体を作ってるのが間違いなのでは?
extern 指定にするべきでは?

投稿日時 - 2017-10-12 00:21:00

お礼

自分もそうしないといけないと思います。
そうしないと二重定義になるというのが自分の解釈です。
でもこのプロジェクトだけエラーがないです。
プロジェクトごとに結果が違うってことはVisualStudioのバグなんでしょうか?

投稿日時 - 2017-10-13 11:21:05

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-