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

  • Day9TV

    Day9TV

    22 NİSAN 2010
  • Digital Bounds

    Digital Boun

    19 Temmuz 2013
  • Kai Moosmann

    Kai Moosmann

    5 Temmuz 2006