次のように、指定された初期化子を使用して C99 で構造体を初期化できることを認識しています。
typedef struct
{
char a;
char b;
int c;
} MyStruct;
MyStruct s = {.a = 1, .b = 2, .c = 3};
(そのコードは私の C++ コンパイラでは機能しませんが、(ロシア語の) ウィキペディアはそうすべきだと言っています)
しかし、いくつかの奇妙な理由で、このようなコードもコンパイルされます (そして期待どおりに動作します):
typedef struct
{
char a;
char b;
int c;
} MyStruct;
MyStruct arr[5];
int main(void)
{
arr[0] = (MyStruct){.a = 1, .b = 2, .c = 0x332211};
}
初期化は、オブジェクトが作成されたときにのみ機能し、その後では機能しないはずだと思いました。
これは通常の動作ですか、それともある種のコンパイラの癖ですか? C++ で動作する必要がありますか? 中括弧で囲まれたこのことは正確には何ですか? ある種の名前のない一時的な構造?Keil uVision 4 を使用しています (指定された初期化子は C++ モードでは機能しません)。