Windows 7 Ultimate SP1 32bit
Visual C++ 2010
DXライブラリ
分割されたファイルを見直しているのですが、
インクルードガードについて2つほど疑問点に思うことがあったので質問をさせて下さい。
1.グローバル定数の宣言
すべてのソースファイルからインクルードされる、グローバルなヘッダーファイルを
作っていたのですが、
下記のように、ヘッダーファイル内でconst定数を宣言したところ
//const.h
#ifndef CONST_INCLUDE
#define CONST_INCLUDE
//ウィンドウサイズ
const int MAX_X = 800; //ウィンドウサイズ最大横
const int MAX_Y = 600; //ウィンドウサイス最大縦
const int MIN_X = 0; //ウィンドウサイス最小縦
const int MIN_Y = 0; //ウィンドウサイス最小縦
const int CEN_X = MAX_X / 2; //ウィンドウ中心横
const int CEN_Y = MAX_Y / 2; //ウィンドウ中心縦
#endif
ヘッダー内で宣言をするのは良くないと言う噂も耳にしたので、
下記のようなパターンも作ったのですが、こちらもコンパイルは通りました。
//const.h
#ifndef CONST_INCLUDE
#define CONST_INCLUDE
//ウィンドウサイズ
extern const int MAX_X; //ウィンドウサイズ最大横
extern const int MAX_Y; //ウィンドウサイス最大縦
extern const int MIN_X; //ウィンドウサイス最小縦
extern const int MIN_Y; //ウィンドウサイス最小縦
extern const int CEN_X; //ウィンドウ中心横
extern const int CEN_Y; //ウィンドウ中心縦
#endif
//const.cpp
//ウィンドウサイズ
const int MAX_X = 800; //ウィンドウサイズ最大横
const int MAX_Y = 600; //ウィンドウサイス最大縦
const int MIN_X = 0; //ウィンドウサイス最小縦
const int MIN_Y = 0; //ウィンドウサイス最小縦
const int CEN_X = MAX_X / 2; //ウィンドウ中心横
const int CEN_Y = MAX_Y / 2; //ウィンドウ中心縦
最初の例だと、全てのソースファイルに、各定数が埋め込まれそうな気がしたのですが・・・
でも、それだと多重定義になるような・・・
手間を考えると最初の例の方が楽なのですが・・・
どちらも、結果は同じなのでしょうか?
あと、どちらの書き方の方が良いのでしょうか?(人それぞれかもしれませんが…)
2.グローバル関数の宣言
さっきと同じ、すべてのソースファイルからインクルードされる、
グローバルなヘッダーファイルの件ですが、
関数宣言の際にヘッダーに
普通に宣言する場合と
extern宣言の場合。
externを付けても付けなくても問題なくコンパイルが通り、問題なく動作しているのですが、
プロトタイプ宣言も、外部宣言も同じでしょうか?
処理は問題ないのですが、どちらの方が効率が良いのかな・・・
と、変に考え込んでしまったので意見を下さると幸いです。