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

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


Познающий...
******

Группа: Свой
Сообщений: 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.

Вопрос: кто тупит? biggrin.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
megajohn
сообщение Apr 16 2014, 07:29
Сообщение #2


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

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



Цитата(haker_fox @ Apr 16 2014, 09:33) *
Вопрос: кто тупит? biggrin.gif



если без иннициализации, то должно было бы помочь ledState = !!!ledState; ( с тремя ! )


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 16 2014, 07:42
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 16 2014, 08:38
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Сергей Борщ @ Apr 16 2014, 11:42) *
Результат оператора ! имеет тип bool, неявного преобразования его операнда к int, в процессе обратного преобразования от которого к bool сыграло бы правило "все, что не 0, то true", я тут не вижу

Даже не так. Результат оператора ! - это 0 или 1 по определению. Поэтому ! и !!! - это одно и то же. Другое дело, что компилятор вправе рассчитывать, что переменная типа bool содержит 0 или 1, отсюда и оптимизация (XOR). Если это условие нарушено (хотя бы из-за того, что переменная не инициализирована), то кодер сам дурак.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - haker_fox   QUOTE (scifi @ Apr 16 2014, 17:38) то код...   Apr 16 2014, 12:03
|- - scifi   Да не обижайтесь так. Это я фигурально выразился, ...   Apr 16 2014, 12:10
|- - AHTOXA   Вот в тему ссылочка.   Apr 16 2014, 17:02
- - haker_fox   QUOTE (scifi @ Apr 16 2014, 21:10) Да не ...   Apr 16 2014, 23:23


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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 00:02
Рейтинг@Mail.ru


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