Добавление к ответу, данному @nss - мои извинения, это был бы комментарий, если бы комментарии не были так ограничены форматированием:
#include <stdlib.h>
struct Test {
unsigned short x : 6;
unsigned short y : 1;
unsigned short z;
};
int main( int argc, char *argv[] ) {
printf( "sizeof( Test ) = %d\n", sizeof( struct Test ) );
return 0;
}
Он печатает «4» для размера,Я тестировал с gcc, g ++ и Sun Studio CC и cc.
Не то, чтобы я рекомендовал делать то, что вы пытаетесь сделать, но вы, вероятно, могли бы сделать то, что вы пытаетесь сделать с объединением.Я видел (но не написал сам) код, который выглядел так:
struct Test {
unsigned short x1 : 6;
unsigned short x2 : 3;
: 1; // unused
unsigned short x3 : 4;
// ...
};
У меня там может быть немного неправильный синтаксис ... но я так не думаю.
Суть в том, что: создайте две отдельные структуры (или структуру и объединение) с макетом, который вы собирались, затем вставьте несколько фиктивных элементов, где они должны перекрываться, и объедините их вместе.