Чому цей код складається?
_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, "");
Перші 2 твердження очевидно правильні, але я б очікував, що останній рядок не вдасться, оскільки я розумію, що sizeof()
слід оцінювати до цілого літералу, який не може трактуватися як масив. Іншими словами, це не вдасться так само, як і наступний рядок:
_Static_assert(4[0] == 4, "");
Цікаво, що наступне дійсно не вдається скласти (що має робити те саме, ні?):
_Static_assert(*sizeof(my_arr) == 4, "");
помилка: недійсний аргумент типу unary '*' (мають 'давно непідписаний int') _Static_assert (* sizeof (my_arr) == 4, "");
Якщо це має значення, я використовую gcc 5.3.0
( sizeof( my_arr ) )[ 0 ]
невдачі.