Re: struct -> bit field -> offsetof()
От: Аноним  
Дата: 20.09.06 12:41
Оценка:
Здравствуйте, Zberik, Вы писали:

[]

Z>Хотелось бы получить что-то типа

Z>int offset = offsetofBit(S1, bf4) // == 204
Z>offset = offsetofBit(S1, bf1) // == 200

Z>Как это реализовать наиболее эффективно?


Если без ручного задания смещений, то переносимо -- никак (стандарт не особо щедр в плане битовых полей). Я и компиляторозависимых способов не знаю.

А так, можно что-то вроде следующего:


typedef struct 
{
    int field1 : 2;
    int field2 : 1;
} MY_STRUCT;

/* надо вбивать руками */
#define BIT_OFFSET__MY_STRUCT__field1    0
#define BIT_OFFSET__MY_STRUCT__field2    2


#define OFFSETOF_BIT(struct_name, field_name)    OFFSETOF_BIT_1(BIT_OFFSET__##struct_name##__##field_name)

#define OFFSETOF_BIT_1(macro)                    OFFSETOF_BIT_2(macro)
#define OFFSETOF_BIT_2(macro)                    macro


Только имейте в виду, что расположение битовых полей стандартом не специфицировано.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.