Designated initializers

U-Boot のコードを読んでいたら、なんだかつっかえて読みづらい構文がありました。こんなの。

struct S s1 = {
    .a = "abcd",
    .b = 123
};

意味はなんとなく分かるんだけど、C 言語にそんな構文あったっけか? と、K&RANSI C89 で育ったオジさんは、頭をかしげました。
どーせ GNU の独自構文だろうとか思いながら H&S をひもといたら、ちゃんと載ってました。(^^;) 自称三文プログラマの私も、お恥ずかしい限りです。
答えを明かすと、これは C99 で導入された designated initializers という構文だそうで、例えばこんなところで解説されています。