Bir yapının, iyi hizalanmışsa veya boşluk içeriyorsa, derleme zamanında kontrol edilmesi konusunda bir sorunum var. Kontrol, ek test kodunda yapılabilir, ancak gerçek uygulama kodunda "paketlenmiş" veri istemiyorum. C++ 'da bir yapının iyi hizalanmış olduğunu veya boşluklar içerdiğini kontrol edin
Bu
korumaları içerir tipik bir örnek, başlık dosyası (MyData.h) aşağıdaki gibidir: Bir olası çözüm bulundu#ifndef MYDATA_H_
#define MYDATA_H_
struct uneven
{
int bla_u32;
short bla_u16;
char bla_u8;
/* <-- this gap will be filled in the unpacked version */
};
#endif // MYDATA_H
- aşağıya bakınız.
Sorular:
yapı
uneven
zaman derlemek de Açılmamış meslektaşı ile karşılaştırıldığında bayt farklı sayıda olup olmadığını kontrol etme zarif bir yolu var mı?C'de (ad alanı kullanmadan) çalışacak bir çözüm bile olabilir mi?
Diğer test kodlarında kontrol yapıldığında ne demek istiyorsunuz? İddiayı kodunuza yerleştirme konusunda kontrol sahibi olmak ister misiniz? Aksi takdirde, derleme zamanını kontrol etmek istediğiniz her yeni yapının statik belirleme uygulamanızla birleştirilen (@Dutow'un önerdiği gibi) bir işlevi tanımlayabilirsiniz. – jcxz
"kontrol, ek test kodunda yapılabilir" anlamına gelir, sadece kontrol (aynı zamanda statik iddia) serbest bırakılmış kod tabanının veya gerçek ürünün parçası olmayan ek c veya cpp dosyalarında yapılabilir (ör. Ek derleyici bayrakları kullanarak) veya gerçek sürümün parçası olmaması gereken bir şey) –