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したときとか相性が良いと思うんだけどなぁ。