Вы правы, полистал документацию - так и есть. Тогда, по идее, должно было бы скомпилироваться.Аlex писал(а):У "? :" приоритет ниже чем у "==". По этому, Ваши рассуждения неверны.
будет восприниматься какКод: Выделить всё
time_format_12_AM_PM == 0 ? point[0] = 0 : point[0] = 1;Код: Выделить всё
(time_format_12_AM_PM == 0) ? point[0] = 0 : point[0] = 1;
Вопросы по С/С++ (СИ)
- Реклама
- Сообщения: 353
- Зарегистрирован: Вс янв 19, 2014 22:41:55
У операторов ?: и = одинаковый приоритет и правая ассоциативность. Результат операции присваивания - собственно присваиваемое значение. Вероятно случай компилятора-параноика, который хочет результат всей тернарной операции обязательно куда-то присунуть. Для проверки гипотезы попробуйте так:FreshMan писал(а):в чем состоит моя ошибка при написании тернарного оператора ?
Код: Выделить всё
point[0] = time_format_12_AM_PM == 0 ? point[0] = 0 : point[0] = 1;Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
Автор, вероятнее всего, сам что-то намудрил и сидит теперь подглядывает за нами, стыдясь ответить сюда 
за неимением опыта такое приходится мудрить что и стыдно потом становится за напрасно написанные строкиАlex писал(а):Автор, вероятнее всего, сам что-то намудрил
остановился на этом
Код: Выделить всё
point[0] = time_format_12_AM_PM; // выкл/вкл точки 0-го разряда для обозначения АМ/РМ
Tell Me The Truth
- Сообщения: 353
- Зарегистрирован: Вс янв 19, 2014 22:41:55
Нет ничего постыдного в наработке опыта и оттачивании своего стиля кодирования. Наоборот - получайте удовольствие от возможности выразить свой замысел гораздо более компактно чем ещё вчера. А завтра лаконичнее чем сегодня.FreshMan писал(а):за неимением опыта такое приходится мудрить что и стыдно потом становится за напрасно написанные строки![]()
Повторю просьбу - проверьте, пожалуйста, компилируется ли такой вариант:
Код: Выделить всё
point[0] = time_format_12_AM_PM == 0 ? point[0] = 0 : point[0] = 1;Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
- Реклама
Я проверил
первые две закомментированные строки не компилятся, третья скомпилировалась. Выходит присваивать там, при работе с этим компилятором, нельзя.
P.S. вот со скобками проглотило
Код: Выделить всё
volatile uint8_t x, y, z, res;
// x == 0 ? y = 0 : z = 1;
// res = x == 0 ? y = 0 : z = 1;
res = x == 0 ? y : z;
P.S. вот со скобками проглотило
Код: Выделить всё
x == 0 ? (y = 0) : (z = 1);
«И всё-таки она вертится!»
нет, ошибка тажеSiarzhuk писал(а): Повторю просьбу - проверьте, пожалуйста, компилируется ли такой вариант:Спасибо.Код: Выделить всё
point[0] = time_format_12_AM_PM == 0 ? point[0] = 0 : point[0] = 1;
Tell Me The Truth
интересно... что же не так? чем выражение a=b отличается от (a=b)?FreshMan писал(а):ошибка таже
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
тоже интересно, компилятор GCC для AVR версии 4.3.3 тоесть который с WinAVR устанавливается.
P.S. MinGW 4.8.1 ситуация не изменилась
P.S. MinGW 4.8.1 ситуация не изменилась
«И всё-таки она вертится!»
- Сообщения: 353
- Зарегистрирован: Вс янв 19, 2014 22:41:55
А как вам понравится вот это: Renesas-овский e2 студень с KPIT-овским компилятором на базе какой-то гоцацы при сборке С-файла:ARV писал(а):что же не так?
Код: Выделить всё
../src/params.c:623:65: error: lvalue required as left operand of assignment
point[0] = time_format_12_AM_PM == 0 ? point[0] = 0 : point[0] = 1;
^Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
мне никогда не нравится то, что я не понимаю...Siarzhuk писал(а):А как вам понравится вот это
удивительно, но только на последний оператор присваивания компилятор ругается, и взятие этого оператора в скобки решает проблему... не понимаю - почему?! неужели компилятор берет за lvalue все, что левее последнего оператора = ????
point[0] = time_format_12_AM_PM == 0 ? point[0] = 0 : point[0] = 1; - ошибка
point[0] = time_format_12_AM_PM == 0 ? point[0] = 0 : (point[0] = 1); - ошибки нет
P.S. двоеточие, что ли, не является частью тернарного оператора, а рассматривается, как отдельный оператор с приоритетом, равным присваиванию?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
ВСЕЦЕЛО СОЛИДАРЕН !ARV писал(а):мне никогда не нравится то, что я не понимаю...
Tell Me The Truth
- Сообщения: 353
- Зарегистрирован: Вс янв 19, 2014 22:41:55
В C тернарная операция имеет приоритет выше чем присваивание и компилятор парсит её так:ARV писал(а):мне никогда не нравится то, что я не понимаю...
time_format_12_AM_PM == 0 ? point[0] = 0 : point[0] = 1;
результат чего не является lvalue - следовательно имеем ошибку при попытке присвоить ему 1.
В C++ приоритет у обоих одинаковый и тернарная исчисляется полностью:
time_format_12_AM_PM == 0 ? point[0] = 0 : point[0] = 1;
Походу туман рассеялся.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
я, наверное, тупой, но я пока в тумане: если приоритет операций равный, то выполняться они должны слева направо, не так ли? т.е. и в этом случае должна быть ошибка...Siarzhuk писал(а):Походу туман рассеялся
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Не все слева направо. = и ?: как раз справа налево. Там ещё в Notes интересно про ?: написано, что не всякие компиляторы его приоритет одинаково обрабатывают.
Да уж, в таких ситуациях лучше всё же скобками пользоваться. А такие тонкости оставить для собеседований.
Да уж, в таких ситуациях лучше всё же скобками пользоваться. А такие тонкости оставить для собеседований.
я, конечно, прошу прощения, но привык иметь по всем вопросам свое мнение и вот никак не могу удержаться, чтобы в очередной раз его не высказать: какую траву надо было курить, чтобы сделать стандартом такую кучу противоречий?!
язык Си, имхо, типичный пример того, как не надо делать языки программирования! в язык намеренно введено огромное количество способов сделать одно и то же, но всякий раз с разными побочными эффектами, а чтобы эти эффекты как-то устаканить, введено огромное количество разных оговорочек... в итоге никакой логики в ее естественном понимании применить невозможно: только привыкнешь, что какое-то действо делается вот так вот, как обнаруживаешь, что почти такое же категорически нельзя делать аналогично! зачем все это?!
имхо, в очередной раз повторюсь: язык Си - это кафтан, сшитый стальным тросом стандарта из кусочков всевозможных материй - от дерюги до тончайшего шелка. а все потому, что хотелось все и сразу...
а про скобки согласен: в Си их много не бывает.
имхо, в очередной раз повторюсь: язык Си - это кафтан, сшитый стальным тросом стандарта из кусочков всевозможных материй - от дерюги до тончайшего шелка. а все потому, что хотелось все и сразу...
я, конечно, и тут с собственным пониманием снова вылезу.. имхо, единственное правило, которое логично помогает справиться с Си, заключается в том, что не надо даже знать про множество вариантов извращений, которые позволяет делать Си из кода, а следует придерживаться минимального набора возможностей (см. бритва Оккама). касательно тернарного оператора это выливается в то, что я говорил ранее: его назначение - возвращать одно из двух значений, поэтому использовать в нем операнды, для которых возврат значения является побочным эффектом, не надо.WiseLord писал(а): в таких ситуациях лучше всё же скобками пользоваться
а про скобки согласен: в Си их много не бывает.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 353
- Зарегистрирован: Вс янв 19, 2014 22:41:55
Проблему вижу в том, что "колёсный пароход родом из середины XIX века" до сих пор используют в промышленных количествах как основное средство транспортировки. И если в физическом мире длительность существования объектов ограничена естественным устареванем, дряхлением и неизбежным распадом на базовые элементы, то в информационной среде "таких факторов не действует" и свойственная человеческому мозгу лень скорее оборудует каждую "пароконную повозку" спутниковой системой навигации чем рискнёт построить на этом месте совершенно новую инфраструктуру, заточенную под безопасность движения и автопилот.ARV писал(а):в язык намеренно введено огромное количество способов сделать одно и то же, но всякий раз с разными побочными эффектами
И, как выразился один знакомый, -"участие в большом коллективном опен-сорц проекте с лихвой утоляет желание тратить время на игру в квесты."
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
- Сообщения: 353
- Зарегистрирован: Вс янв 19, 2014 22:41:55
Скорее проблема в его непривычном использовании в контексте тернарной операции. Ведь конструкции типаARV писал(а):для которых возврат значения является побочным эффектом
Код: Выделить всё
a = b = c = 3;Си ведь родом из 70-ых годов прошлого века - а мир вокруг него изменился чуть ли не полностью. Нужно, наверное, представлять то время, когда ресурсы были дороги и использовалась любая возможность их сэкономить за счёт конструкций множественного назначения. Другой вопрос, что дедушке пора на покой - тут я согласен.
Вы, верно, в душе не поэт.ARV писал(а):а про скобки согласен: в Си их много не бывает.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
что верно, то верно.Siarzhuk писал(а):Вы, верно, в душе не поэт.
такое ощущение, что программисты Си - все сплошь поэты, но при этом одновременно и поэтические критики, потому как каждый стремится из любви к искусству написать такой лаконичный код, который обязательно будет раскритикован в пух и прах другим поэтом, выдающим альтернативу еще лаконичнее и непонятнее.Siarzhuk писал(а):Расписать замысел максимально лаконично - удовольствие сравнимое разве что с внезапно забредшим в голову четверостишием
скажем, попадался мне пример кода, который (я уж не помню) какую-то полезную функцию решал... но выглядело это как пустой цикл for, а вся полезная работа выполнялись внутри круглых скобок for... кому такое четверостишие нужно? да, так можно, но нужно ли?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 353
- Зарегистрирован: Вс янв 19, 2014 22:41:55
Так ведь стремление к доминированию - базовая потребность приматов. И никто с программистиков этой почётной обязанности не снимал. Выделяются чем могут [- если время после кодинга остается].ARV писал(а):такое ощущение, что программисты Си - все сплошь поэты, но при этом одновременно и поэтические критики, потому как каждый стремится
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 


