SORU
31 Mayıs 2012, PERŞEMBE


C ve C : otomatik yapısının Kısmi başlatma

somestruct üç tamsayı üyeleri varsa, örneğin, her zaman C (veya C ) fonksiyonu bunu yapmak için TAMAM olduğunu düşündüm:

somestruct s = {123,};

İlk üye 123 başlatılmış ve son iki 0 başlatılmış olur. Ben genellikle otomatik dizilerle aynı şey, bir dizideki tüm tamsayılar sıfır olarak başlatılır, böylece int arr[100] = {0,}; yazma.


Yakınlarda GNU C Reference Manual okudum:

Eğer bir yapı değişkeni başlatmak yaparsanız, etkisi bağlıdır ister statik Depolama (Depolama Sınıfı Belirteçleri) veya değil. Eğer öyle ise, integral çeşitleri ile üyeleri 0 ile başlatılır ve işaretçi üyeleri; aksi halde, değeri NULL olarak başlatılır yapı üyeleri belirsiz.


Birisi, C ve C standartları ne söyle otomatik yapısı ve otomatik başlatma dizisi ile ilgili kısmi misiniz? Bir sorun olmadan Visual Studio'da yukarıdaki kodu yapıyorum ama gcc/g , ve belki de diğer Derleyiciler ile uyumlu olarak iyi olmak istiyorum. Teşekkürler

CEVAP
31 Mayıs 2012, PERŞEMBE


Bağlantılı gcc belgelere konuşmazKısmi Başlatmasadece bahsediyor(Tam)BaşlatmayaHiç Başlatma.

Kısmi Başlatma nedir?

Standartları Tam başlatma ya-başlatma Yok ya da nesnelerin Kısmi başlatma tanımlayın. Kısmi Başlatma yaygın bazı başlatıcılar verdiğiniz bir durumu ifade eder ama ben standart dışı bir terminoloji.e: dizinin boyutu veya yapısı sayısından daha Az başlatıcılar elemanları başlatıldı.

Örnek:

int array[10] = {1,2};                    //Case 1:Partial Initialization

Ne (Tam)Başlatma Başlatma ya da Hayır?

Başlatma değişkeni oluşturulduğunda aynı zamanda oluşturulan başlangıç değer sağlamak anlamına gelir. yani: aynı kod ifadesi.

Örnek:

int array[10] = {0,1,2,3,4,5,6,7,8,9};    //Case 2:Complete Initialization
int array[10];                            //Case 3:No Initialization

Alıntı paragraf Case 3 davranışını açıklar.

Kuralları Kısmi Başlatma(Case 1) ile ilgili iyi bir standart tarafından tanımlanmış ve bu kurallar değişken depolama tipleri başlatılmış bağlı değildir.
AFAIK, Tüm ana Derleyiciler bu kurallara 0 uyumluluk.


Birisi, C ve C standartları ne söyle otomatik yapısı ve otomatik başlatma dizisi ile ilgili kısmi misiniz?

C ve C standartları eğer tamsayı bir dizi otomatik depolama bulunuyorsa bile garanti ve eğer brace-kapalı listesinde daha az başlatıcılar eğer orada o başlatılmamış elemanlarıgerekir0 için başlatıldı.

C99 Standart 6.7.8.21

Varsa daha az başlatıcılar bir ayraç-kapalı listesi olandan elemanları veya üyeleri toplama, ya da daha az karakter bir dize başlatmak için kullanılan bir dizi bilinen bir boyutu daha var öğeleri dizisi, geri kalan toplu olacaktır başlatıldı örtülü olarak aynı nesnelere statik depolama süresi.


C kuralları küçük bir fark ile belirtilmiştir.

C 03 Standart 8.5.1 Toplar
Para 7:

Eğer toplu olarak üye var daha listede daha az başlatıcılar ise, o zaman her üyenin açıkça başlatılmış olacaktırdeğer başlatıldı(8.5). [Örnek:

 struct S { int a; char* b; int c; };
 S ss = { 1, "asdf" };

başlatır ss.a 1, ss.b "asdf" ss.c ile değeri bir ifadesi şeklinde int()0. ]

Başlatma Değeri tanımlanmış ise
C 03 8.5 Başlatıcılar
Paragraf 5:

İçindeğer başlatılamadıyazın T demektir bir nesne:
— eğer T bir sınıf türü (Madde 9) ile kullanıcı-ilan yapıcı (12.1), sonra varsayılan oluşturucu için T denir (ve başlatma. hatalı biçimlendirilmiş T yoktur ulaşılabilir kurucu varsayılan);
eğer T kullanıcı tarafından bildirilen bir kurucu olmadan sendikasız bir sınıf türü ise, o zaman her statik olmayan veri üyesi ve T temel sınıf bileşen değer başlatıldı;
eğer T bir dizi türü ise, o zaman her eleman değer başlatıldı;
— aksi halde, nesnenin sıfır başlatıldı

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • amc

    amc

    21 EYLÜL 2005
  • Britec09

    Britec09

    4 Mart 2009
  • BumbleDroid

    BumbleDroid

    18 EKİM 2010