MBedder, терминатор (30.12.2013 01:09 - 01:14, просмотров: 330) ответил Юра на Не знаю как это получится при форматировании, но можно примерно так:
Для читабельности: //Сначала пишем таблицу.
#define COMMON_TABLE ( X_MACRO ) \
X_MACRO( a, 1 ) \
X_MACRO( b, 1 ) \
X_MACRO( c, 1 )
//Потом превращаем ее в структуру.
#define EXPAND_AS_STRUCT( x, y ) unsigned char x : y;
typedef struct{ COMMON_TABLE( EXPAND_AS_STRUCT )
}_COMMON_TABLE_STRUCT_t;
// Потом номера бит помещаем в энум.
#define EXPAND_AS_ENUM( x, y ) bitpos_ ## x,
typedef enum{ COMMON_TABLE( EXPAND_AS_ENUM )
}_COMMON_TABLE_ENUM_t;
//Итого: int main() {
char q=0;
q|=(1<<bitpos_c);
return 0;
}
// То есть номера бит видятся как bitpos_a, bitpos_b, bitpos_c.
Так это же придется проделать несколько сотен/тысяч раз - на каждый новый бит?