多重インクルード禁止について
今まで、メインソース(cpp)一つとヘッダーでやってきましたが
最近プログラムが長すぎるようになり多重インクルードよく発生します。
毎回インクルードファイルを書くのもめんどくさいし、どうやったら多重インクルードをおこらないように
綺麗まとめられます?
あと、関数も私はヘッダーに書いてましたけど、
人のプログラムを見るとヘッダーに関数の名前、cppファイルにその関数の内容を書いてます。
普通はそうなんですか?
多重インクルードにういて
Re:多重インクルードにういて
多重インクルードという用語を知っているので既知の事かもしれませんが
C++ だと、ヘッダファイルの先頭の行に
ヘッダファイルには宣言のみで実態を記述してはいけません。
記述されてると、コンパイルエラーになるはずなのでお気をつけて。
C言語でも可能です
これが一般的らしいです。少し特殊な文字列に見えるかもしれませんが
他のdefine定数と被らないよう配慮しての事だと思います。
他にも __MAIN_H__ などが一般的によく用いられています。
参考:http://www.geocities.jp/ky_webid/c/060.html
> あと、関数も私はヘッダーに書いてましたけど、
> 人のプログラムを見るとヘッダーに関数の名前、cppファイルにその関数の内容を書いてます。
> 普通はそうなんですか?
普通は、cppファイルに関数を書きます。
極論、ヘッダファイルはプロトタイプ宣言のみを行います。
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:多重インクルードにういて
> C++
> #pragma once
Visual C++のことですかね?
たしか、gccでも使えたような気がしますが・・・(嘘でしたら申し訳ありません。。)
> #pragma once
Visual C++のことですかね?
たしか、gccでも使えたような気がしますが・・・(嘘でしたら申し訳ありません。。)
Re:多重インクルードにういて
>gccでも使えたような
使えなかったと思います。
代用として、
#ifdef tempNAME
#define tempNAME
<ここに中身。>
#endif
が使えたはずです。
使えなかったと思います。
代用として、
#ifdef tempNAME
#define tempNAME
<ここに中身。>
#endif
が使えたはずです。