|
Переменная типа bool не инвертируется, Но если заменить на if, то всё работает) |
|
|
|
Apr 16 2014, 05:33
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Добрый день! IAR 6.40, ARM. Это не работает, переменная не меняет своё значение при каждом вызове функции CODE void CSmcsCh::ledTask() { ledState = !ledState; CSmcsChHal::turnLed( ledState ); } А это работает CODE void CSmcsCh::ledTask() { if( ledState ) { ledState = false; } else { ledState = true; } CSmcsChHal::turnLed( ledState ); } ledState объявлена как приватный члена класса CSmcsCh. Вопрос: кто тупит?
--------------------
Выбор.
|
|
|
|
|
 |
Ответов
|
Apr 16 2014, 07:42
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(megajohn @ Apr 16 2014, 10:29)  если без иннициализации, то должно было бы помочь ledState = !!!ledState; ( с тремя ! ) Почему? Результат оператора ! имеет тип bool, неявного преобразования его операнда к int, в процессе обратного преобразования от которого к bool сыграло бы правило "все, что не 0, то true", я тут не вижу.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 16 2014, 08:38
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(Сергей Борщ @ Apr 16 2014, 11:42)  Результат оператора ! имеет тип bool, неявного преобразования его операнда к int, в процессе обратного преобразования от которого к bool сыграло бы правило "все, что не 0, то true", я тут не вижу Даже не так. Результат оператора ! - это 0 или 1 по определению. Поэтому ! и !!! - это одно и то же. Другое дело, что компилятор вправе рассчитывать, что переменная типа bool содержит 0 или 1, отсюда и оптимизация (XOR). Если это условие нарушено (хотя бы из-за того, что переменная не инициализирована), то кодер сам дурак.
|
|
|
|
Сообщений в этой теме
haker_fox Переменная типа bool не инвертируется Apr 16 2014, 05:33 Сергей Борщ Цитата(haker_fox @ Apr 16 2014, 08:33) Во... Apr 16 2014, 05:43 haker_fox 1-й случай.
CODE 55 void CSmcsCh::ledT... Apr 16 2014, 06:06 Сергей Борщ Я вижу инвертирование в обоих случаях. И не работа... Apr 16 2014, 06:34  haker_fox QUOTE (Сергей Борщ @ Apr 16 2014, 15:34) ... Apr 16 2014, 06:41   Сергей Борщ Цитата(haker_fox @ Apr 16 2014, 09:41) Не... Apr 16 2014, 06:52    haker_fox QUOTE (Сергей Борщ @ Apr 16 2014, 15:52) ... Apr 16 2014, 07:03 scifi Нормально выглядит код. EOR - это exclusive OR, то... Apr 16 2014, 06:24 Alex11 А какое значение переменной было до входа в этот к... Apr 16 2014, 06:26 haker_fox Переменная никак не инициализировалась...( Сейчас ... Apr 16 2014, 06:29     AHTOXA Вот в тему ссылочка. Apr 16 2014, 17:02 haker_fox QUOTE (scifi @ Apr 16 2014, 21:10) Да не ... Apr 16 2014, 23:23
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|