ページ 1 / 1
多重インクルードにういて
Posted: 2009年12月11日(金) 00:03
by uul
多重インクルード禁止について
今まで、メインソース(cpp)一つとヘッダーでやってきましたが
最近プログラムが長すぎるようになり多重インクルードよく発生します。
毎回インクルードファイルを書くのもめんどくさいし、どうやったら多重インクルードをおこらないように
綺麗まとめられます?
あと、関数も私はヘッダーに書いてましたけど、
人のプログラムを見るとヘッダーに関数の名前、cppファイルにその関数の内容を書いてます。
普通はそうなんですか?
Re:多重インクルードにういて
Posted: 2009年12月11日(金) 00:58
by array
多重インクルードという用語を知っているので既知の事かもしれませんが
C++ だと、ヘッダファイルの先頭の行に
#pragma once
を追記するだけで多重インクルードガードしてくれます。
ヘッダファイルには宣言のみで実態を記述してはいけません。
記述されてると、コンパイルエラーになるはずなのでお気をつけて。
C言語でも可能です
/* main.h */
#ifndef MAIN_H // インクルードガード
#define MAIN_H
struct sample
{
int num;
};
#endif // ここまで
MAIN_Hというのは、ヘッダファイル名を大文字にして.を_になってます。
これが一般的らしいです。少し特殊な文字列に見えるかもしれませんが
他のdefine定数と被らないよう配慮しての事だと思います。
他にも __MAIN_H__ などが一般的によく用いられています。
参考:
http://www.geocities.jp/ky_webid/c/060.html
> あと、関数も私はヘッダーに書いてましたけど、
> 人のプログラムを見るとヘッダーに関数の名前、cppファイルにその関数の内容を書いてます。
> 普通はそうなんですか?
普通は、cppファイルに関数を書きます。
極論、ヘッダファイルはプロトタイプ宣言のみを行います。
Re:多重インクルードにういて
Posted: 2009年12月11日(金) 01:37
by kazuoni
> C++
> #pragma once
Visual C++のことですかね?
たしか、gccでも使えたような気がしますが・・・(嘘でしたら申し訳ありません。。)
Re:多重インクルードにういて
Posted: 2009年12月11日(金) 05:09
by Ma
>gccでも使えたような
使えなかったと思います。
代用として、
#ifdef tempNAME
#define tempNAME
<ここに中身。>
#endif
が使えたはずです。
Re:多重インクルードにういて
Posted: 2009年12月11日(金) 08:59
by たいちう
× #ifdef tempNAME
○ #ifndef tempNAME