const void * bools[] = { "ItemA", mine->a, "ItemB", mine->b, 0, 0 };
Есть несколько проблем с этим фрагментом:
mine
не объявлен как тип указателя (по крайней мере, в коде, который вы опубликовали), поэтому вы не должныиспользовать оператор выбора компонента ->
;- Если вы измените это на оператор выбора
.
, вы попытаетесь сохранить логическое значение в a или b в качестве указателя, а это не то, что вам нужно; - Но это не имеет значения, поскольку вы не можете взять адрес битового поля (§ 6.5.3.2, параграф 1).
Если вы пытаетесь связать логическое значение с другим объектом, вам лучше объявить тип, такой как
struct checkedObject {void *objPtr; int check};
, и инициализировать массив как
struct checkedObject[] = {{"ItemA", 1}, {"ItemB", 0}, {NULL, 0}};
Битовые поля имеют свое применение, но это не одно из них.Вы действительно не экономите место в этом случае, так как для хранения двух битовых полей необходимо выделить хотя бы одну полную адресуемую единицу памяти (байт, слово и т. Д.).