Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Тернарный оператор в левой части выражения
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
ViKo
Читаю:
Код
  int32_t step_temp = Chan ? Step2 : Step1;

Обрабатываю...
Хочу записать обратно:
Код
(Chan ? Step2 : Step1) = step_temp;

Получаю:
error: #137: expression must be a modifiable lvalue
Как обойти?
ukpyr
if чем не угодил ?
ViKo
Цитата(ukpyr @ Feb 10 2014, 16:45) *
if чем не угодил ?

Угодил. Тогда зачем ? : и в правой части? Не вижу логики. laughing.gif
Сергей Борщ
Результатом тернарного оператора является значение одной из переменных. Значению нельзя ничего присвоить. Компилятор прав.
SSerge
А как объявлены Step1 и Step2 ? Чтобы им что-то присвоить они действительно должны быть "modifiable lvalue".
_Артём_
Цитата(ViKo @ Feb 10 2014, 17:51) *
Угодил. Тогда зачем ? : и в правой части? Не вижу логики. laughing.gif

Какую логику хотите увидеть?

Цитата
int32_t step_temp = Chan ? Step2 : Step1;

Всё равно что записать
Код
if (Chan) step_temp=Step2; else step_temp=Step1;

А от этого что ожидается
Цитата
(Chan ? Step2 : Step1) = step_temp;

?

ViKo
Цитата(_Артём_ @ Feb 10 2014, 17:17) *
Какую логику хотите увидеть?
Всё равно что записать
Код
if (Chan) step_temp=Step2; else step_temp=Step1;

А от этого что ожидается?

Элементарную логику...
Код
if (Chan) Step2 = step_temp;
else        Step1 = step_temp;
_Артём_
Цитата(ViKo @ Feb 10 2014, 18:23) *
Элементарную логику...
"Логика у тебя, гражданин Зубек, готов доказать, фашистская, и не к свободе она тебя ведет!"
Вам хочется странного...не иначе...
_pv
*(Chan ? &Step1 : &Step2) = tmp;
только подозреваю в скомпилированном виде может выглядеть не очень красиво, по сравнению if (Chan) Step1 = tmp; else Step2 = tmp;
smalcom
>> Элементарную логику...
такую логику си не умеет, книжку придётся прочесть.
и хорошо, что не умеет.
ViKo
Цитата(_pv @ Feb 10 2014, 18:01) *
*(Chan ? &Step1 : &Step2) = tmp;
только подозреваю в скомпилированном виде может выглядеть не очень красиво, по сравнению if (Chan) Step1 = tmp; else Step2 = tmp;

Да, так получается чуть больше байтов и тактов в ассемблерном листинге.
ar__systems
Цитата(ViKo @ Feb 10 2014, 14:53) *
Да, так получается чуть больше байтов и тактов в ассемблерном листинге.

Больше, по сравнению с чем? С кодом, которые не компилируется?
_Pasha
Цитата(ViKo @ Feb 10 2014, 22:53) *
Да, так получается чуть больше байтов и тактов в ассемблерном листинге.

ето от компилера зависит. гцц могет и убрать лишнее по самое
ViKo
Цитата(ar__systems @ Feb 17 2014, 19:30) *
Больше, по сравнению с чем? С кодом, которые не компилируется?

смешно... rolleyes.gif
Tarbal
Цитата(_Артём_ @ Feb 10 2014, 18:17) *
Какую логику хотите увидеть?


Всё равно что записать
Код
if (Chan) step_temp=Step2; else step_temp=Step1;

А от этого что ожидается

?


Один нюанс. Вернее два.
1. Оператор еще возвращает значение, а if нет. То есть оператор может быть использован в правой части оператора присваивания. Иногда это полезно.
2. Используя if можно проделать множество разнообразных операций по условию, а оператор только возвращает одно либо другое значение.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.