指示付きの初期化子 (Designated Initializer)

とは、なんぞやというと、C99で追加された『構造体などの初期化を手助けする機能』らしい。
使い方はこんな感じ。

#include <assert.h>

typedef struct {
  float x, y;
} vec;

int
main(){
  vec v = {.y = 2.0f, .x = 1.0f};
  assert(v.x == 1.0f);
  assert(v.y == 2.0f);
  return 0;
}

変数を定義するときにメンバを指定して、構造体の初期化を行うことが出来ます。


さて、この『指示付きの初期化子』ですが、C99に追加された機能なので、C++では使うことは出来ません。
(そもそもC++のあとにC99が策定されているので)
C++でこの機能が使いたい場合は、ガシガシ自前で書いていくしかないみたいです。
C99で書いたソースをC++に移植する場合は、コードを書き換えないと駄目なので注意が必要みたいですねー。


[参照]
http://seclan.dll.jp/c99d/c99d07.htm#dt19991025
http://www.rhinocerus.net/forum/language-c/620248-c-vs-c-non-trivial-designated-initializers-not-supported.html
http://d.hatena.ne.jp/fd0/20100213/p1