Как работают подобъекты в C?
Что означает автономные квадратные скобки внутри массива C пользовательского типа?
typedef enum {
BAR_1 = 0,
BAR_2,
BAR_3,
} bar_types;
typedef struct {
int is_interesting;
int age;
} foo_s;
static foo_s bars[] = {
[BAR_1] = {1, 2}, /* What is being done here? */
[BAR_2] = {1, 41},
[BAR_3] = {0, 33},
};
В приведенном выше коде, что означает [BAR_1] = {1, 2}
? Когда можно использовать отдельные квадратные скобки?
Я заметил, что если я добавлю повторяющееся значение в скобках, clang выдаст предупреждение об инициализации подобъекта.
static foo_s bars[] = {
[BAR_1] = {1, 2},
[BAR_2] = {1, 41},
[BAR_3] = {0, 33},
[BAR_3] = {0, 33},
};
-----
$clang example.c
example.c:17:19: warning: subobject initialization
overrides initialization of other fields within its
enclosing subobject [-Winitializer-overrides]
[BAR_3] = {0, 33},
^~~~~~~
Что такое подобъект C?
1 ответ
Это инициализация структуры, "подобъект" - это экземпляр структуры, которая инициализируется.
Ваше предупреждение исходит от попытки инициализировать одну и ту же позицию массива дважды.
также см. Как инициализировать структуру в соответствии со стандартами языка программирования C