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

 
 
> Проблема с условием, m = m+I|P == I ? m : 0;
ave!
сообщение Aug 20 2018, 08:18
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 20-05-11
Пользователь №: 65 166



Добрый день!

Я переношу чужую программу с AVR на STM32 (под HAL Keil).

m = m+I|P == I ? m : 0;

Эта строка выдает предупреждение: "| имеет более низкий приоритет, чем ==; == будет оцениваться сначала"
Когда пишу m = (m+I|P) == I ? m : 0; предупреждение исчезает, но я не знаю можно ли так писать, не нарушит ли эта запись условие.

Таких предупреждений много и есть более сложные выражения.

if (x+r-y|u&32|p > 2&(p-4|j-7 || b[G=x+3^r>>1&7]-k-6 || b[G^1]|b[G^2])) t += p<5; else F = y;

Warning: '&' within (внутри) '|'
Warning: & has lower precedence than >; > will be evaluated first
Warning: '&' within (внутри) '|'

Подскажите ссылку где можно поучится этим условиям в контексте моей проблемы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Aug 20 2018, 09:01
Сообщение #2


Гуру
******

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



QUOTE (ave! @ Aug 20 2018, 11:18) *
m = m+I|P == I ? m : 0;

Эта строка выдает предупреждение: "| имеет более низкий приоритет, чем ==; == будет оцениваться сначала"
Когда пишу m = (m+I|P) == I ? m : 0; предупреждение исчезает, но я не знаю можно ли так писать, не нарушит ли эта запись условие.
Скобки вы расставили неправильно даже несмотря на подсказку компилятора. Если автор исходного кода знал приоритеты операций (а судя по всему он их знал), то скобки должны стоять так: m = ((m + I) | (P == I)) ? m : 0.

P.S. В последнее время компиляторы что-то уж больно часто стали ругаться на очевидные выражения. Неужели настолько упал уровень основной массы современных программистов, что они не в состоянии запомнить приоритет операторов? Жду - не дождусь, когда компилятор начнет требовать скобки в выражении a*x+b.


--------------------
На любой вопрос даю любой ответ
"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
ave!
сообщение Aug 20 2018, 11:36
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 20-05-11
Пользователь №: 65 166



Цитата(Сергей Борщ @ Aug 20 2018, 12:01) *
Скобки вы расставили неправильно даже несмотря на подсказку компилятора. Если автор исходного кода знал приоритеты операций (а судя по всему он их знал), то скобки должны стоять так: m = ((m + I) | (P == I)) ? m : 0.


Сергей Борщ, я скопировал все 7 предупреждений.
Может у вас будет настроение расставить все скобки.
Буду вам очень благодарен.
Чувствую, что даже после изучения приоритетов я все-равно где-то, что-то не так сделаю.
Программа скомпилируется и даже работать будет, но это шахматный алгоритм, там можно не понять что что-то не так работает.

(1) while (d++<n||d<3||z&K==I&&(N<T&d<98||(K=X,L=Y&~M,d=3)))

(2) while (r=p>2&r<0?-r:-o[++j])

(3) if (t&k|p<3&!(y-x&7)-!t)

(4) v-=p-4|R>29?0:20;

(5) Y=y|S&F;

(6) if (x+r-y|u&32|p>2&(p-4|j-7||b[G=x+3^r>>1&7]-k-6||b[G^1]|b[G^2]))

(7) m=m+I|P==I?m:0;
Исправление готово: m = ((m+I)|(P==I)) ? m : 0;

Мой случай как раз яркий пример для статьи на хабре:
Как вы пишете условия в СИ-подобных языках? Со скобками в условиях или без?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ave!   Проблема с условием   Aug 20 2018, 08:18
- - aaarrr   Цитата(ave! @ Aug 20 2018, 11:18) Под...   Aug 20 2018, 08:45
- - segment   Воу. Если не секрет, то что это за проект такой? А...   Aug 20 2018, 08:55
|- - ave!   Цитата(segment @ Aug 20 2018, 11:55) Воу....   Aug 20 2018, 10:29
|- - jcxz   Цитата(ave! @ Aug 20 2018, 13:29) Тут...   Aug 20 2018, 11:31
|- - Arlleex   Цитата(jcxz @ Aug 20 2018, 15:31) Ибо: вм...   Aug 22 2018, 12:33
|- - jcxz   Цитата(Arlleex @ Aug 22 2018, 15:33) А ещ...   Aug 22 2018, 13:02
|- - Сергей Борщ   QUOTE (Arlleex @ Aug 22 2018, 15:33) А ещ...   Aug 22 2018, 13:55
|- - Arlleex   Цитата(Сергей Борщ @ Aug 22 2018, 16:55) ...   Aug 25 2018, 07:08
|- - jcxz   Цитата(Arlleex @ Aug 25 2018, 10:08) Но в...   Aug 25 2018, 07:21
|- - Arlleex   Цитата(jcxz @ Aug 25 2018, 10:21) Я тоже ...   Aug 25 2018, 07:39
|- - jcxz   Цитата(Arlleex @ Aug 25 2018, 10:39) Про ...   Aug 25 2018, 07:59
|- - Arlleex   Цитата(jcxz @ Aug 25 2018, 10:59) Загляни...   Aug 25 2018, 09:23
|- - jcxz   Цитата(Arlleex @ Aug 25 2018, 12:23) Сход...   Aug 25 2018, 09:59
|- - Arlleex   Цитата(jcxz @ Aug 25 2018, 12:59) Тест Ва...   Aug 25 2018, 10:24
|- - jcxz   Цитата(Arlleex @ Aug 25 2018, 13:24) Един...   Aug 25 2018, 12:24
|- - Arlleex   Цитата(jcxz @ Aug 25 2018, 15:24) Конечно...   Aug 25 2018, 13:23
|- - jcxz   Цитата(Arlleex @ Aug 25 2018, 16:23) Откр...   Aug 25 2018, 13:49
|- - Arlleex   Цитата(jcxz @ Aug 25 2018, 16:49) А Вы ко...   Aug 25 2018, 14:15
- - ViKo   Дык, обфускация.   Aug 20 2018, 08:57
|- - aaarrr   Цитата(ViKo @ Aug 20 2018, 11:57) Дык, об...   Aug 20 2018, 09:05
- - segment   Да, да, она или дизассемблировано. Просто я однажд...   Aug 20 2018, 09:00
|- - Непомнящий Евгений   Цитата(Сергей Борщ @ Aug 20 2018, 12:01) ...   Aug 20 2018, 10:18
||- - Сергей Борщ   QUOTE (Непомнящий Евгений @ Aug 20 2018, 13...   Aug 20 2018, 11:25
||- - Непомнящий Евгений   Цитата(Сергей Борщ @ Aug 20 2018, 14:25) ...   Aug 20 2018, 12:35
|- - jcxz   Цитата(ave! @ Aug 20 2018, 14:36) Исп...   Aug 20 2018, 11:47
|- - _pv   Цитата(jcxz @ Aug 20 2018, 18:47) Поэтому...   Aug 20 2018, 12:16
|- - ave!   Приоритет операций C++ - это я себе в тему на заме...   Aug 20 2018, 12:20
|- - jcxz   Цитата(ave! @ Aug 20 2018, 15:20) jcx...   Aug 20 2018, 12:23
|- - ave!   Цитата(jcxz @ Aug 20 2018, 15:23) Мне каж...   Aug 20 2018, 13:05
|- - jcxz   Цитата(ave! @ Aug 20 2018, 16:05) Сти...   Aug 20 2018, 13:24
|- - Сергей Борщ   QUOTE (jcxz @ Aug 20 2018, 16:24) Возможн...   Aug 20 2018, 13:28
|- - jcxz   Цитата(Сергей Борщ @ Aug 20 2018, 16:28) ...   Aug 20 2018, 13:30
- - jcxz   Цитата(ave! @ Aug 20 2018, 11:18) if ...   Aug 20 2018, 11:17
- - yes   ну дык (по описанию micro-Max) задача стояла миним...   Aug 20 2018, 14:28
|- - jcxz   Цитата(yes @ Aug 20 2018, 17:28) ну дык (...   Aug 20 2018, 16:12
- - ViKo   Поскольку было объяснение, что писалось на конкурс...   Aug 25 2018, 07:41
- - Obam   Во времена настали: раздел про AVR, а тут про приг...   Aug 25 2018, 19:46
|- - jcxz   Цитата(Obam @ Aug 25 2018, 22:46) Во врем...   Aug 25 2018, 19:58
- - Obam   Ну, на фоне 6502 и z80 вполне себе...   Aug 27 2018, 15:33


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

 


RSS Текстовая версия Сейчас: 25th June 2025 - 02:30
Рейтинг@Mail.ru


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