2010-10-03 22 views
26

Olası çoğaltmaları:
Empty class in C++
What is the size of an empty struct in C?sizeof boş yapısı C cinsinden 0 ve C++ da neden?

Ben C boş yapı ++ o boyutu 1. Ben de doğrulayarak düşünce olduğunu okumuştum. Maalesef onu bir C dosyası olarak kaydettim ve <stdio.h> başlığını kullandım ve çıktıyı görmek beni şaşırttı. Bu C++ dosyası olarak derlenmiş C dosya ve 1 olarak derlenmiş

struct Empty { 

}; 

int main(void) 
{ 
    printf("%d",(int)sizeof(Empty)); 
} 

0 baskı anlamına gelir O 0

idi. Sebebini bilmek istiyorum. Ben C++ 'da boş yapının büyüklüğünün sıfır olmadığını, çünkü boyut 0 olsaydı, sınıfın iki nesnesinin mümkün olmayan aynı adrese sahip olacağını okudum. Nerede yanlışım?

+4

-1 Hayır, yapmadım daha bu meydana niçin açıklayan harika bir makale, t 'C' olarak derleyelim. – pmg

+3

@Ninad: [Bunu] denediniz mi (http://ideone.com/WAxMI)? –

+2

Bu dil seviyesinde sorular sorduğunuzda lütfen derleyici adını ve sürümünü ekleyin. –

cevap

13

C.'de boş bir yapınız olamaz. Sözdizimsel bir kısıtlama ihlalidir. Ancak gcc, C as an extension'daki boş bir yapıya izin verir.

yapı-beyan-liste davranışı tanımsız, hiçbir adlandırılmış üyeler varsa:

C99 diyor çünkü yapısı herhangi adlandırılmış üye yoksa Ayrıca davranış tanımsız olduğunu.

Yani

struct Empty {}; //constraint violation 

struct Empty {int :0 ;}; //no named member, the behaviour is undefined. 

Ve boş yapının evet boyutu birkaç iyi nedenleri vardır C++ cannot be zero :)