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

  • bcbauer

    bcbauer

    7 ŞUBAT 2007
  • Christian Atlas

    Christian At

    26 Mart 2009
  • LG Mobile Global

    LG Mobile Gl

    2 EYLÜL 2010