Pourquoi est-ce que le code de la compilation?
_Static uint32_t my_arr[2];
_Static_assert(sizeof(my_arr) == 8, "");
_Static_assert(sizeof(my_arr[0]) == 4, "");
_Static_assert(sizeof(my_arr)[0] == 4, "");
Les 2 premières assertions sont évidemment correct, mais je me serais attendu à la dernière ligne à l'échec, car ma compréhension est qu' sizeof()
doit correspondre à un entier littéral, qui ne peut pas être traitée comme un tableau. En d'autres termes, il ne pourrait pas de la même manière que la ligne suivante échoue:
_Static_assert(4[0] == 4, "");
Fait intéressant, la suite n'est en effet l'échec de la compilation (ce qui devrait faire la même chose, non?):
_Static_assert(*sizeof(my_arr) == 4, "");
erreur: invalid argument de type de unaire ' * ' (, 'de long unsigned int") _Static_assert(*sizeof(my_arr) == 4, "");
Si il le faut, je suis en utilisant gcc 5.3.0