Skip to main content

ログ取得ツール (移転先予定地)

C言語も最近は無茶できるようになったんだね…

私はかなり時代に取り残されてますね。C言語の配列の初期化がすごいことになっていた。

char a[] = { [0 … 255] = ‘z’, [5] = ‘5’, [2] = ‘2’ };

信じられないことに、意図通り(sizeof(a) = 256で、内容はzz2zz5zzz…)に初期化されます。

構造体の初期化でメンバの名前を指定(struct st{ int member1; }; st a = { .member1 = 1, };)できるのと同じ書式です。複数の要素を一気に初期化することができるのが変わった点かな。指定が重なった場合は後ろで指定したものが有効になります。

これまでは連想配列的な気分で配列を使いたい場合に、配列のインデックスに使う名前をenumで定義して、順番に気をつけながら配列の定義を書かなければなりませんでした。

enum { KEY1, KEY2, KEY3, KEY4, };
char *a[] = { value1, value2, value3, value4, };

この書き方は、途中でずれた途端に破綻します。要素の数が増えるに従ってズレの確率が高まる。でも、これからは以下のように書けます。

enum { KEY1, KEY2, KEY3, KEY4, };
char *a[] = { [KEY1] = value1, [KEY3] = value3, [KEY2] = value2, [KEY4] = value4, };

順不同で書けるし、キーと値を明示的に対応付けて書けるので、かなり不安感が減ります。

あとはやっぱり例外処理をつけたら相当書きやすくなると思うんだけどなぁ…