реклама на сайте
подробности

 
 
> корректно ли в Си 99 использование булей true false?
Метценгерштейн
сообщение Jul 24 2015, 14:40
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Или правильней передавать 1 и 0.
При использовании типа bool, какой размер этой переменной получается? В памяти хранится каждая переменная в отдельной переменной? Или в случае, если тип bool, то компилятор в одну переменную сразу 8 булок в разные биты вставляет?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
CrimsonPig
сообщение Jul 24 2015, 14:45
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



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


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

Меньше одного байта все равно не получится.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 24 2015, 15:04
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

bool это в Си int со всеми вытекающими, но начиная с С99 - как бог на душу положит компиляторописателям, но не менее байта sm.gif.
По мне, так нефиг использовать ввиду того, что возникают противоречия с размером. Хватит и разнобоев с C++.
Ну true и false в с99 это просто макро, такие-же, как классические TRUE FALSE от K&R


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Jul 24 2015, 15:16
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(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>



Сообщение отредактировал CrimsonPig - Jul 24 2015, 15:17
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 24 2015, 15:30
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

Гдеж его взять чистый sm.gif, посему есть, но не тип, а переопределение int. В плюсах еще прикол с BOOL, который как и в Си хидерах есть int и "правильным" BOOLEAN


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SSerge
сообщение Jul 24 2015, 18:01
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Булевский тип в С99 всё-таки есть, и компилятор его знает без необходимости подключать какие-либо хидеры.
Только называется он _Bool, а вот bool действительно является макроопределением.
Сделано это, как я понимаю, для упрощения использования ранее написанного, где "вручную" определяли свой булевский тип.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 24 2015, 18:06
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (SSerge @ Jul 24 2015, 21:01) *
Булевский тип в С99 всё-таки есть

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 05:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016