Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: корректно ли в Си 99 использование булей true false?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Метценгерштейн
Или правильней передавать 1 и 0.
При использовании типа bool, какой размер этой переменной получается? В памяти хранится каждая переменная в отдельной переменной? Или в случае, если тип bool, то компилятор в одну переменную сразу 8 булок в разные биты вставляет?
CrimsonPig
Цитата(Метценгерштейн @ Jul 24 2015, 15:40) *
Или правильней передавать 1 и 0.
При использовании типа bool, какой размер этой переменной получается? В памяти хранится каждая переменная в отдельной переменной? Или в случае, если тип bool, то компилятор в одну переменную сразу 8 булок в разные биты вставляет?


printf("%d", sizeof(bool));

Меньше одного байта все равно не получится.
zltigo
QUOTE (Метценгерштейн @ Jul 24 2015, 17:40) *
Или правильней передавать 1 и 0.
При использовании типа bool, какой размер этой переменной получается? В памяти хранится каждая переменная в отдельной переменной? Или в случае, если тип bool, то компилятор в одну переменную сразу 8 булок в разные биты вставляет?

bool это в Си int со всеми вытекающими, но начиная с С99 - как бог на душу положит компиляторописателям, но не менее байта sm.gif.
По мне, так нефиг использовать ввиду того, что возникают противоречия с размером. Хватит и разнобоев с C++.
Ну true и false в с99 это просто макро, такие-же, как классические TRUE FALSE от K&R
CrimsonPig
Цитата(zltigo @ Jul 24 2015, 16:04) *
bool это в Си int со всеми вытекающими, но начиная с С99 - как бог на душу положит компиляторописателям, но не менее байта sm.gif.
По мне, так нефиг использовать ввиду того, что возникают противоречия с размером. Хватит и разнобоев с C++.
Ну true и false в с99 это просто макро, такие-же, как классические TRUE FALSE от K&R


Типа bool в чистом Ц нет по определению.

Я, кстати, тоже в платформо-зависимых вещах предпочитаю использовать вместо bool типы вроде uint32. Просто из-за выравнивания в структурах и атомарности доступа.
Если надо много битовых флагов - самодельные битовые массивы на основе тех же uint32. По крайней мере, я знаю, как оно работает в отличии от std::vector<bool>

zltigo
QUOTE (CrimsonPig @ Jul 24 2015, 18:16) *
Типа bool в чистом Ц нет по определению.

Гдеж его взять чистый sm.gif, посему есть, но не тип, а переопределение int. В плюсах еще прикол с BOOL, который как и в Си хидерах есть int и "правильным" BOOLEAN
SSerge
Булевский тип в С99 всё-таки есть, и компилятор его знает без необходимости подключать какие-либо хидеры.
Только называется он _Bool, а вот bool действительно является макроопределением.
Сделано это, как я понимаю, для упрощения использования ранее написанного, где "вручную" определяли свой булевский тип.
zltigo
QUOTE (SSerge @ Jul 24 2015, 21:01) *
Булевский тип в С99 всё-таки есть

Речь о "нет" про до С99 Си. И вообще полный розброд - посмотрте те-же MS хидеры - там будут еще BOOL aka int и BOOLEAN ака _Bool. А в полуоси в свое время были BOOL, BOOL16 и BOOL32 sm.gif
А вообще пора С11 читать sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.