2009-05-07 3 views
1

С GCC, я мог бы сделать упаковку перечислений с использованием атрибут ((упакована)), но это, кажется, ближе всего в MSVC, #pragma пакет, не работает на перечислений. Кто-нибудь знает, как упаковать перечисления в 1 байт вместо обычного целого размера?Упаковка перечислений с помощью компилятора MSVC++

+0

при условии, что с помощью его (если он существует) приведет к не переносимый код, то почему бы вам нужно использовать это в любом случае ? – lothar

+1

Потому что иногда переносимость не имеет значения, и необходима совместимость с другой системой. Несколько лет назад я хотел этого, когда общался через общую RAM до платы 68K (чей компилятор поддерживал задание размера перечисления). –

+0

@Steve Fallows В этом случае я предпочел бы (набор) функций для преобразования из перечня C в внешний формат и из него. это безопаснее (поскольку могут потребоваться преобразования endian (не в этом случае, но вообще) и переносимые. – lothar

ответ

2

Это MSVC конкретны:

// instances of this enum are packed into 1 unsigned char 
// warning C4480: nonstandard extension used 
enum foo : unsigned char { first, second, last }; 
assert(sizeof(foo) == sizeof(unsigned char)); 

// instances of this enum have the common size of 1 int 
enum bar { alpha, beta, gamma }; 
assert(sizeof(bar) == sizeof(int)); 

Для справки смотрите здесь: MSDN -> enum

+0

Я думаю, что это C#. Я никогда не видел такой синтаксис на C++. Если он работает, это действительно здорово. ll воздержитесь от downvoting, потому что я не уверен. – rmeador

+0

возможно, MSVC уже реализует C++ 0x, но тогда это должно быть «enum» класса, если я не ошибаюсь – lothar

+0

Это расширение C++/CLI: http://msdn.microsoft.com/ en-us/library/ms173702.aspx – Eclipse

Смежные вопросы