綾小路龍之介の素人思考

アマチュアだから考えてしまう

グローバル変数は少なめに、と言われることがある。べつにグローバル変数が絶対にだめだと言うわけではないのだけれど、意味的にグローバル(プログラム全体が其の変数の内容を知らねばならない)であるべき変数と言うものはあるはず。もちろんそのような変数の数は少ないに越したことは無いはずだが、そのようなものを一括して扱いたいなぁと思うとこんなことになってしまう。

typedef struct {
        int N;
        double a;
        size_t b_num;
        double *b;
} param;
void param_new(param *p)
{
        p->N = 1;
        p->a = 10.1;
        p->b_num = 100;
        p->b = (double *)calloc(p->b_num,sizeof(double));
        return;
}
void param_free(param *p)
{
        free(p->b);
        return;
}
void param_print(param *p)
{
        size_t i = 0;
        size_t b_num = p->b_num;
        printf("# i\t=\t% d\n",i);
        printf("# a\t=\t% e\n",a);
        for(i=0;i<b_num;i++){
                printf("# b[%d]\t=\t% e\n",i,b[i]);
        }
        return;
}
int main(int argc, char **argv)
{
        param *p;
        p = (param *)calloc(1,sizeof(param));
        param_new(p);
        param_print(p);
        param_free(p);
        free(p);
        return 0;
}

プログラム全体で知っておかねばならないパラメータは構造体paramの内部で宣言しておいて、それらの初期値をparam_newで定義する。プログラム終了直前にparam_freeでparam_newの中でアロケートしたメモリをfreeする。param_printはparam_newではparamの内容チェック用。

これが良いのか悪いのかよくわからないけれど、こんな感じで書くことに最近はまってる。意外とgetoptしたときとか相性が良いと思うんだけどなぁ。

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2007-07-27T03:53:35+09:00
  2. Modified: 2007-07-27T03:56:58+09:00
  3. Generated: 2017-08-12T23:10:32+09:00