Bu kod neden derleniyor?
_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, "");
İlk 2 iddia açıkça doğrudur, ancak son satırın başarısız olmasını beklerdim, çünkü benim anlayışım, sizeof()
bir dizi olarak ele alınamayacak bir tamsayı değişmezi olarak değerlendirilmelidir. Başka bir deyişle, aşağıdaki satırın başarısız olmasıyla aynı şekilde başarısız olur:
_Static_assert(4[0] == 4, "");
İlginç bir şekilde, aşağıdakiler gerçekten derlenemez (hangisi aynı şeyi yapıyor olmalı, hayır?):
_Static_assert(*sizeof(my_arr) == 4, "");
hata: tekli '*' geçersiz tür bağımsız değişkeni ('uzun işaretsiz int' var) _Static_assert (* sizeof (my_arr) == 4, "");
Önemliyse gcc 5.3.0 kullanıyorum
( sizeof( my_arr ) )[ 0 ]
Başarısız olduğundan şüpheleniyorum .