2012-01-19 47 views
13

Bazı veri yapısı için bir ayrıştırıcı yazarım, saatlerce hata ayıklandıktan sonra Visual Studio'nun yapıları anlattığım gibi yorumlamadığını öğrendim. Bazı "padding" Ben "sizeof (foo) = 4 * 4 + 2 = 18" beklenen ama "sizeof (foo) = 20" olsun Yerel olarak devre dışı bırakma

struct foo { 
unsigned char a; //0x00 
unsigned char b; //0x01 
unsigned int c; //0x02 
unsigned int d; //0x06 
unsigned int e; //0x0A 
unsigned int f; //0x0E 
//0x12 
}; 

kullanılır görünüyor. Sadece bu özel yapı için dolgu yapmak mümkün mü?

'u denedim, ancak çalışmıyor. Yardımın için teşekkürler.

+0

Bence [MSDN'de bu makalede yardımcı olacaktır] (http://msdn.microsoft.com/en-us/library/ms253935%28v=vs. % 90 29.aspx). –

+0

'/ Zp 1' ile derliyor musunuz? –

+1

@MartinBroadhurst Küresel olarak dolgulamayı devre dışı bırakır, hans çözümü çalışır. – Listing

cevap

25

bunun için #pragma pack direktifini kullanın:

#pragma pack(push, 1) 
struct foo { 
    // etc.. 
}; 
#pragma pack(pop) 
+0

Teşekkür ederim, bir çekicilik gibi çalışır. – Listing

2

Visual Studio 2010, aradığınız şeyi yapmak için #pragma pack sahiptir.

+0

Fakat bu tüm yapıları etkilemez mi? Sadece bu yapı için yerel olarak istiyorum. – Listing

+1

Daha sonra geri alabilirsiniz - bu belgeleri okudunuz mu? –

+1

Bunu yapmak için #pragma pack push/pop komutunu kullanabilirsiniz. Sadece önce itin ve yapıdan sonra açılır. –

İlgili konular