В тот момент, когда вы (ab) используете правила продвижения C для сохранения логического значения во всем, кроме типа выражения, предоставляемого операторами сравнения, то есть int
, вы находитесь в состоянии греха. На более серьезном замечании: я не могу представить случай, когда тип, в котором я храню булеву часть информации, имел бы значение, за исключением огромного количества логических значений и написания довольно многих критически важных частейАвтомобильного программного обеспечения, я едва ли могу представить себе случай, когда такая структура данных могла бы быть полезной. Почти каждая информация, которую я когда-либо обрабатывал, которая содержала решение «да / нет», также несла связку связанных данных, и поэтому естественная схема хранения была структурой. Я никогда не уклонялся от битовых полей, независимо от того, что об этом говорит нынешний стандарт MISRA (дело против них рассыпается в прах, если вы продумаете контраргументы с надетой шляпой «Sane Safety Software Expert»). Когда это было не так, это был какой-то глобальный флаг, и поэтому размер формата хранения не имел значения. Итак, вопрос в том, какие оставшиеся приложения будут иметь значение для логического формата хранения? Единственное, о чем я могу думать, это размер стека или, скорее, потеря возможности делать вызов с параметрами только в регистрах, если вы не выбрали наименьший доступный размер. Это сразу вызывает два контраргумента: функции со многими слабосвязанными логическими параметрами крайне подозрительны, и даже если они существуют, от них не должны зависеть ни производительность, ни потребление памяти (если они являются узкими местами, это тоже крайне подозрительно). Может быть небольшой выигрыш в максимальном размере стека, если у вас есть иерархия вызовов с логическим значением здесь и там, но это IME, а не место для микрооптимизации.
Чтобы дать ответ TL; DR: формат не должен отклоняться от того, что ожидают (новые) программисты в вашей команде, и это, скорее всего, тот, который широко использовался / стандарт в течение последнего десятилетия. Если хранимый тип ваших логических значений действительно имеет значение, я, совершенно не спрашивая, осмелюсь удаленно диагностировать проблему построения программного обеспечения.