K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>>手間と言えば手間なんですが、グローバル変数にするような >>ものは、必ず初期化する趣味なので、GLOBAL みたいな簡単な >>マクロでは対処できなかったりします (たとえ 0 や NULL で >>初期化する場合でも、明示的に初期化するスタイルを採って >>ます)。 > >GLOBAL char *hoge[] >#ifdef GLOBAL_VARIABLE_DEFINE > = { > "foo", > "bar", >} >#endif /* GLOBAL_VARIABLE_DEFINE */ >; > >とか書いたこともありますけどね (^^; > >>また、そもそもグローバル変数なんてほとんど使わないので、 >>手間的にはたいしたことないです。 > >別レスで書きましたけど、実は私もそうです。 > >別レスで挙げたCLC_Interpreterのように、構造体にまとめて >malloc()で領域を確保することが多いです。 ># わかりにくいですがCLC_Interpreterはポインタでして、 ># こういうふうにポインタがポインタでないかのようにtypedefするのは ># よろしくないなあ、と今は思っています。当時はXtとかのスタイルを見て ># かっこいいと思ってしまったわけですが。 >## clc_current_interpreterのようなものを静的に持ってしまうと >## リエントラントでなくなります。当時はマルチスレッドなんて >## そうそう使わないよね、と思ってたわけですが… >## まあ、リエントラントにしたい場合も、外部のインタフェースにだけは影響を >## 与えないようにしてあるからまあ許容範囲かと。 > >>昔風のプログラムなら >>グローバル変数にする場合も、たいていは accessor/mutator >>関数でラップして見かけは関数にしてしまうことがほとんど >>です。 > >たとえばclc_current_interpreterは関数でラップされていませんが、 >CLCモジュールの外から見えることもありません。 >これはモジュールの粒度をどのくらいにするかという問題だと思いますが、 >「関連の強いソースの集合体としてのモジュール」内(せいぜい数千行レベル)で >あれば、この程度のカプセル化の侵食は許容範囲じゃないかなあ、 >と私は思っています。 > >もちろん最初からgetter/setterを書いたからといってさしたる手間でも >ないですけれど。 >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!