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

 
 
> bool "третье состояние"
HEX
сообщение Jul 22 2009, 07:34
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 54
Регистрация: 25-11-04
Из: Тула
Пользователь №: 1 228



Код
#include <stdbool.h>

int main()
{
  bool B;
  B = 13;                      //B = 1
  B = !B;                      //B = 0
  
  unsigned char* Ptr;
  Ptr = (unsigned char*)(&B);
  *Ptr = 13;                   //B = 13
  
  bool B2;
  B2 = B;                      //B2 = 12
  B2 = !B;                     //B2 = 13
  return 0;
}

Почему при присваивание непосредственно числа все нормально ( B = 13 ), а при присваивании другово bool ( B2 = B ) мусор остается?
Так и должно быть?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sensor_ua
сообщение Jul 23 2009, 08:28
Сообщение #2


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

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



Использование выражений типа
Код
if(a == true)

само по себе вроде и не страшно, но неправильно, потому как проверять по равенству/неравенству действительно можно только на false
Цитата
как
Код
(val == 0 ? 0 : 1)

Цитата
стандартный включаемый файл stdbool.h, который определяет
#define bool _Bool
#define true 1
#define false 0

Использую чуть другие буквы и не использую файл stdbool.h
Код
#define false 0
#define true (!(false))

Последняя строчка априори верна. true в таком случае опять же равно +1.
Но, IMHO, использование в Си беззнаковых типов для bool и положительного значения для true это какая-то диверсия, что ли. Из знакового в беззнаковое преобразовать практически всегда возможно, а вот наоборот нет. Использую знаковое представление.
Код
typedef int bool; // для 8-и-битников typedef signed char bool

Хотя это, если таки пытаться делать проверку на true, вылазит боком при использовании структур с битовыми полями объявленного знакового типа bool. Тогда компилятор при знаковом целом типе для bool считает значение поля не как 1, а как -1, а сравнение с true просто никогда не работает (ну и не очень-то и хотелосьwink.gif).


--------------------
aka Vit
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- HEX   bool "третье состояние"   Jul 22 2009, 07:34
- - AHTOXA   Вероятно, компилятор производит преобразования тип...   Jul 22 2009, 07:47
|- - HEX   явное преобразование типа тоже не помогает:КодB2 =...   Jul 22 2009, 08:34
|- - AHTOXA   Цитата(HEX @ Jul 22 2009, 14:34) явное пр...   Jul 22 2009, 08:40
- - Xenia   Цитата(HEX @ Jul 22 2009, 10:34) Почему п...   Jul 22 2009, 08:38
|- - HEX   Цитата(Xenia @ Jul 22 2009, 12:38) Таким ...   Jul 22 2009, 08:56
|- - Xenia   Цитата(HEX @ Jul 22 2009, 11:56) выводит ...   Jul 22 2009, 11:00
||- - KRS   Цитата(Xenia @ Jul 22 2009, 15:00) Это по...   Jul 22 2009, 21:02
|- - tag   Цитата(HEX @ Jul 22 2009, 11:56) Если бы ...   Jul 22 2009, 12:13
- - Oldring   Цитата(HEX @ Jul 22 2009, 11:34) Ptr = (u...   Jul 22 2009, 08:47
|- - HEX   я в этом вижу потенциальную проблему, например, пр...   Jul 22 2009, 10:28
|- - Сергей Борщ   Цитата(HEX @ Jul 22 2009, 13:28) я в этом...   Jul 22 2009, 11:11
||- - HEX   Цитата(Сергей Борщ @ Jul 22 2009, 15:11) ...   Jul 22 2009, 14:57
||- - Oldring   Цитата(HEX @ Jul 22 2009, 18:57) А явное ...   Jul 22 2009, 15:34
|- - Oldring   Цитата(HEX @ Jul 22 2009, 14:28) я в этом...   Jul 22 2009, 11:17
- - sergeeff   Цитата(HEX @ Jul 22 2009, 11:34) Код#incl...   Jul 22 2009, 17:15
|- - ReAl   Цитата(sergeeff @ Jul 22 2009, 20:15) Суд...   Jul 22 2009, 19:52
|- - Сергей Борщ   Цитата(ReAl @ Jul 22 2009, 22:52) Код b1 ...   Jul 22 2009, 23:27


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

 


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


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