Quelle est la signification des crochets autonomes à l'intérieur d'un tableau C d'un type personnalisé?Comment les sous-objets fonctionnent dans 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},
};
Dans le code ci-dessus, quel est le sens de [BAR_1] = {1, 2}
? Quand est-il possible d'utiliser des crochets autonomes?
J'ai remarqué que si j'ajoute une valeur en double entre parenthèses, clang donne un avertissement à propos de l'initialisation du sous-objet.
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},
^~~~~~~
Qu'est-ce qu'un sous-objet C?
ceux qui viennent désigner les éléments du tableau spécifiques à initialisées. Les valeurs enum agissent comme les valeurs 'int' correspondantes, donc' [BAR_1] = {1, 2} 'devient' [0] = {1, 2} ', ce qui signifie que la première structure du tableau (index 0) est initialisée avec 'is_interesting' comme 1 et' age' comme 2. – Dmitri
Pour ce qu'est un sous-objet, voir http://stackoverflow.com/questions/18451683/c-disambiguation-subobject-and-subclass-object – racraman
"subobject" est un objet contenu dans un autre objet. –