ViKo 1 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба Читаю: int32_t step_temp = Chan ? Step2 : Step1; Обрабатываю... Хочу записать обратно: (Chan ? Step2 : Step1) = step_temp; Получаю: error: #137: expression must be a modifiable lvalue Как обойти? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ukpyr 0 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба if чем не угодил ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба if чем не угодил ? Угодил. Тогда зачем ? : и в правой части? Не вижу логики. :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба Результатом тернарного оператора является значение одной из переменных. Значению нельзя ничего присвоить. Компилятор прав. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 6 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба А как объявлены Step1 и Step2 ? Чтобы им что-то присвоить они действительно должны быть "modifiable lvalue". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба Угодил. Тогда зачем ? : и в правой части? Не вижу логики. :laughing: Какую логику хотите увидеть? int32_t step_temp = Chan ? Step2 : Step1; Всё равно что записать if (Chan) step_temp=Step2; else step_temp=Step1; А от этого что ожидается (Chan ? Step2 : Step1) = step_temp; ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба Какую логику хотите увидеть? Всё равно что записать if (Chan) step_temp=Step2; else step_temp=Step1; А от этого что ожидается? Элементарную логику... if (Chan) Step2 = step_temp; else Step1 = step_temp; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба Элементарную логику... "Логика у тебя, гражданин Зубек, готов доказать, фашистская, и не к свободе она тебя ведет!" Вам хочется странного...не иначе... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 79 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба *(Chan ? &Step1 : &Step2) = tmp; только подозреваю в скомпилированном виде может выглядеть не очень красиво, по сравнению if (Chan) Step1 = tmp; else Step2 = tmp; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smalcom 0 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба >> Элементарную логику... такую логику си не умеет, книжку придётся прочесть. и хорошо, что не умеет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба *(Chan ? &Step1 : &Step2) = tmp; только подозреваю в скомпилированном виде может выглядеть не очень красиво, по сравнению if (Chan) Step1 = tmp; else Step2 = tmp; Да, так получается чуть больше байтов и тактов в ассемблерном листинге. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slavka012 0 17 февраля, 2014 Опубликовано 17 февраля, 2014 · Жалоба Да, так получается чуть больше байтов и тактов в ассемблерном листинге. Больше, по сравнению с чем? С кодом, которые не компилируется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 17 февраля, 2014 Опубликовано 17 февраля, 2014 · Жалоба Да, так получается чуть больше байтов и тактов в ассемблерном листинге. ето от компилера зависит. гцц могет и убрать лишнее по самое Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 17 февраля, 2014 Опубликовано 17 февраля, 2014 · Жалоба Больше, по сравнению с чем? С кодом, которые не компилируется? смешно... :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 24 февраля, 2014 Опубликовано 24 февраля, 2014 · Жалоба Какую логику хотите увидеть? Всё равно что записать if (Chan) step_temp=Step2; else step_temp=Step1; А от этого что ожидается ? Один нюанс. Вернее два. 1. Оператор еще возвращает значение, а if нет. То есть оператор может быть использован в правой части оператора присваивания. Иногда это полезно. 2. Используя if можно проделать множество разнообразных операций по условию, а оператор только возвращает одно либо другое значение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться