Я знаю, что я могу инициализировать структуру в 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};
}
я предположил, что инициализация должна работать только тогда, когда О.Б. ject создается, а не потом.
Это поведение, подобное этому, или это какой-то компилятор причуды? Должна ли она работать на C++? Что это такое в фигурных скобках? Какая-то временная неназванная структура? Я использую Keil uVision 4 (и назначенный инициализатор не работает в режиме C++).
Какой у вас компилятор? НКУ? –
Пожалуйста, добавьте эту ссылку в Wikipedia. Кроме того, вы действительно спрашиваете о двух языках (C и C++)? –
@YuHao мой компилятор Keil uVision (как я уже писал выше) – Amomum