Аббревиатуры языка, где прочитать ?

Тема в разделе "Arduino & Shields", создана пользователем Ariadna-on-Line, 7 апр 2021.

  1. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Разбираясь с кодом увидел замечательную строчку, напомнившую мат - фак университета -
    sig = sig > SIGNAL_THRESHOLD ? 1 : 0;
    Выполняет то же, что -
    Код (C++):
    If (sig > SIGNAL_THRESHOLD) {
    sig = 1;
    }
    else {
    sig = 0;
    }
    Значительно сокращает "объем" текста кода ! Мы так теоремы записывали на матфаке.
    Язык Си осваиваю - поэтому вопрос от чайника :
    Эта строчка - обычная конструкция Си ? Где можно прочитать о синтаксисе таких записей. Как хоть сформулировать вопрос для гугла на эту тему ?!
    С уважением.
     
    Последнее редактирование: 7 апр 2021
  2. parovoZZ

    parovoZZ Гуру

    Самая что ни на есть.
    Керниган и Ричи.
     
    Daniil и Igor68 нравится это.
  3. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Ну вот, как всегда. Вместо того чтоб накормить рыбой, начинают учить делать удочки.
     
    Последнее редактирование: 8 апр 2021
  4. arkadyf

    arkadyf Гик

    Ariadna-on-Line нравится это.
  5. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Спасибо. Мне главное было узнать как запрос сформулировать Гуглу. Теперь-то я и сам найду.
    С уважением.
     
  6. Asper Daffy

    Asper Daffy Иксперд

    Кстати, MISRA запрещает использование такой конструкции. NASA не запрещает, но крайне не рекомендует и обязывает отдельно комментировать каждую такую инструкцию.

    Лично мне это пофигу, а Вам - сами решайте.
     
    Un_ka нравится это.
  7. SergeiL

    SergeiL Оракул Модератор

    Код в результате компиляции будет одинаковым, до команды. Я проверял листинги.
    Я больше люблю вариант с "if". Мне он кажется более наглядным.
    Да и для исходного кода важен не объем, а читаемость. ;)
    В таком варианте фигурные скобки не нужны.
    Так будет нагляднее:
    Код (C++):
    if (sig > SIGNAL_THRESHOLD)
        sig = 1;
    else
        sig = 0;
     
     
    Ariadna-on-Line нравится это.
  8. parovoZZ

    parovoZZ Гуру

    Может и не нужны, но если после else вставить ещё один оператор с надеждой, что он исполнится в else, постигнет облом и бессонные ночи в поиске. Поэтому я всегда ставлю скобки.
     
    Un_ka и Airbus нравится это.
  9. SergeiL

    SergeiL Оракул Модератор

    Ну вы же оператор вставляете, а не незнающий дядя, и скобки поставите в этом случае.
    К чему это все нагромождение скобок, если оператор один?
     
  10. parovoZZ

    parovoZZ Гуру

    Когда ведёшь отладку, можешь и не заметить такой вещи.
     
  11. Airbus

    Airbus Радиохулиган Модератор

    А вдруг еще что то захочется туда добавить? Светодиодик зажечь например? Я всегда ставлю. На всякий пожарный—шоб було
     
    Un_ka нравится это.
  12. Unixon

    Unixon Оракул Модератор

    Можно не только в операции присваивания использовать.
    Вот, например, почти безальтернативный по компактности вариант:
    Код (C++):
    bool x = digitalRead(pin);
    Serial.print(x?"high":"low");
    Более наглядный, чем
    Код (C++):

    const char *BOOL_STR[2] = {"low","high"};
    bool x = digitalRead(pin);
    Serial.print(BOOL_STR[x]);
     
    Feofan, Ariadna-on-Line, SergeiL и ещё 1-му нравится это.
  13. Asper Daffy

    Asper Daffy Иксперд

    Что-то мне эта дискуссия перестаёт нравится.

    Чисто на всякий случай спрошу: надеюсь, всё чётко понимают, что операции
    Код (C++):

    sig = <условие> ? <выражение 1> : <выражение 2>;

    // И

    if (<условие>) {
       sig = <выражение 1>;
    } else {
       sig = <выражение 2;
    }
    не полностью эквиваленты?

    И что в случае, если выражения - не просто числа, а что-то посложнее, то там можно такого наворотить, что хрен потом найдёшь почему не работает?
     
  14. SergeiL

    SergeiL Оракул Модератор

    Я давно смотрел, в простейшем варианте с числами, код был скомпилированный древним MS Си v6.0.
    Было интересно будет ли разница в коде.
    На выходе код был идентичным.
     
  15. Рокки1945

    Рокки1945 Гуру

    for и while
     
  16. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Это по-сути циклы. Вы знаете как в таком "тернарном виде" написать выражение цикла ? Поделитесь пожалуйста.
     
  17. Рокки1945

    Рокки1945 Гуру

    Условие проверяется - цикл выполняется
     
  18. Рокки1945

    Рокки1945 Гуру

    Даже добавить нечего к ниже расписанному

    Тернарная или условная операция является более кратким аналогом операции if-else

    Тернарная операция позволяет сократить код записав эту конструкцию в одной строке

    логическое_выражение ? выражение_1 : выражение_2

    1. Вычисляется логическое_выражение
    2. Если оно истинно (т.е. не равно нулю), то тернарный оператор возвращает выражение_1.
    3. Если ложно, то будет возвращено выражение_2.
     
  19. Рокки1945

    Рокки1945 Гуру

    Нам в университете СИ-СИ Кепфала не преподавали - нам ардуино показывали ....
    А когда я спросил - почему - мне сказали что студент должен получать 20 процентов знаний в институте - а остальное САМ-САМ
     
  20. Рокки1945

    Рокки1945 Гуру

    А вообще-то Си и знание языков в скором времени нафик не надо будет - все они имеют одинаковый функционал.
    Будет ценен тот - кто в алгоритме шарит.
    ИМХО - СТРОГО!!!