Neden bir dizideki eleman sayısını hesaplamak için sizeof (element) 'i sizeof (TYPE) yerine tercih etmelisiniz?


15

"King KN's C programlaması" nı okuyorum ve şu ifadeyi buldum:

sizeof(a)/sizeof(a[0])Bir dizideki eleman sayısını hesaplamak için ifadeyi kullanarak tartıştık . T'nin sizeof(a)/sizeof(t)a öğelerinin türü olduğu ifade de işe yarayacaktır, ancak daha düşük bir teknik olarak kabul edilir.

Neden daha düşük bir teknik olarak kabul edilir?


8
programcı bir öğedeki öğe türünü değiştirirse ne olacağını düşündünüz mü? t'den farklı boyuta sahip bir tip. İlk ifade hala iyi olacak, ikincisi kırılacak
gnat

1
@gnat: Buna bir cevap vermelisin.
Martin York

Yanıtlar:


26

sizeof(a)/sizeof(t)türü ifadeye açıkça kodlar. Artık, aynı türü kullandığınızdan emin olmak için derleyici desteği olmadan, birden çok konumda belirtilen tür var. Bu nedenle, dizinin temel türünü değiştirirseniz (tamamen ayrı) sayım ifadesinde değiştirmezseniz, bingo: kodunuz iyi derlenir, ancak öğe sayınız yanlış olur. Eğer şanslıysanız, programınız çökecektir, ancak eğer değilse, neredeyse tamamen doğru bir şekilde çalışacaktır, ancak arada bir tamamen tuhaf davranacaktır.

sizeof(a)/sizeof(a[0])yalnızca dizinin adını gerektiren doğru olduğu garanti edilir. Türü değiştirin ve iyisiniz; dizi adını değiştirmek ve derleyici şikayet edecek. Düşünmeye gerek yok: bu tür bir programlamayı seviyoruz.


sizeof a/sizeof*aGerçekten önemli bir fark olmasa da, gerçekten tercih ederim .
Deduplicator
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.