SORU
9 Temmuz 2015, PERŞEMBE


C boyutu iç mekanizması?

C bir yapı boyutunu almak için boyutu kullanıyorum ama aldığım sonuç beklemiyordum.

struct sdshdr {
    int len;
    int free;
    char buf[];
};


int main(){
    printf("struct len:%d\n",(sizeof(struct sdshdr)));
    return 0;
} //struct len:8, with or without buf

benim sorum neden buf herhangi bir yer işgal etmez neden int tipi boyutunu hala bir 64-bit üzerinde 4 CPU.

burada gcc -v: çıktı

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c  /4.2.1
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.4.0
Thread model: posix  

CEVAP
9 Temmuz 2015, PERŞEMBE


[]esnek bir dizi üye. C standardı açıkça öyle diyor çünkü yapının toplam boyutu sayılmaz, değil:

6.7.2.1/18

Özel bir durum, birden fazla üye adında bir yapısı son öğesi olabilir tamamlanmamış bir dizi türü var; bu esnek bir dizi üye denir. Çoğu durumda, esnek dizi üyesinin göz ardı edilir. Özellikle, yapısı, boyutu gibi. esnek dizi üyesinin daha fazla doldurma izleyen var olabilir dışında atlanmış ihmal etmek anlamına gelir.

Bu esnek dizi üyesinin amacı, dinamik yapı sonra sonunda veri ayırmak için izin çünkü tasarım gereği, kasıtlı. Yapı, bir dosya Başlığı (zaman, başlık protokol vb.)

Example tartışma da dahil olmak üzere standart dışı gcc uzantıları ve eski pre-C99 "". yapı hack

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kanaal van Dj0fifty

    Kanaal van D

    28 EKİM 2011
  • ShoSho

    ShoSho

    20 Ocak 2010
  • The Dubstep FX

    The Dubstep

    5 Mart 2011