>
http://kmaebashi.com/programmer/pointer.html
>では GLOBAL int global_variable; を推奨されているようですが、私は反対です。
うーん。
GLOBALに反対する根拠として一番大きいのは、私としては
「Cの構文をねじ曲げるようなマクロはよろしくない」という原則に
反しているからじゃないかな、と思っています。
#define BEGIN {
みたいなシンタックスのレベルで改変を入れるようなマクロは確かに
いろんな意味でまずいでしょう。
>hoge.c の中で
>#include "hoge.h"
>int global_variable;
>と書いても ISO 文法上何の問題も無いので。
これはそうですね。
>もし仮に hoge.c の中で
>#define GLOBAL_VARIABLE_DEFINE
>#include "hoge.h"
>#include "piyo.h"
>とかやっちゃうと hoge piyo 両方の大域変数が定義されてしまいます。
私のヘッダファイルの切り分け方からすると、
http://kmaebashi.com/programmer/c_yota/module.html
hoge.h, piyo.hが共にプライベートヘッダファイルならどこかでまとめて
#define GLOBAL_VARIABLE_DEFINEして#includeしますし、
piyo.hが別モジュールのパブリックヘッダなら、グローバル変数は公開しないので
この問題は起きないんですね。
>わざわざ同一の記述を複数の個所で行なうのは間違いのもとである
このメリットは一応それなりの説得力はあるかと思っています。
が、私が実際これをどう使っているかというと、たとえばここで
公開しているソースでは、
http://kmaebashi.com/programmer/c_yota/calc_html/calc.html
#ifdef GLOBAL_VARIABLE_DEFINE
#define GLOBAL
#else
#define GLOBAL extern
#endif
GLOBAL CLC_Interpreter clc_current_interpreter;
これ一個だけ… だったら必要ないじゃん、というのはもっともですね (^^;