1. C++ / Говнокод #2037

    +56.3

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    bool a,b;
    
    ...
    
    if(a>b)
    {
    ...

    Увидел в одной либе... Си++ странный язык. Паскаль проще...

    1)Скомпилируеться ли?
    2)Что это значит?

    Запостил: Говногость, 24 Октября 2009

    Комментарии (16) RSS

    • J: написано забавно) это означает "если a и не b"
      0 эквивалентен false
      ненулевое значение эквивалентно true (обычно единица)
      Ответить
      • J: исправляюсь, результат такой как написал выше, но не по указанной причине. В C++ можно сравнивать булевы значения, причем true > false
        Ответить
        • Правды больше лжи? Может я и писсемист, но не верю...
          Ответить
        • 5.9/1
          The relational operators group left-to-right.
          .....
          The operands shall have arithmetic, enumeration or pointer type.

          bool will be converted to int, where false->0, true->1
          Ответить
    • > Паскаль проще
      в этом - не проще
      Ответить
    • Скомпилируется и даже без warning'ов. Всё нормально тут.
      Ответить
      • если компилируется - не значит нормально
        следовало по-человечески написать a && !b
        Ответить
    • Оооо. Я так буду делать. Мне нравиться. И оптимальность больше, раз меньше операций. :)
      Ответить
    • Получается как-то вот так (если компилятору лень оптимизировать):

      if(a && !b) { ....

      mov eax, a
      test eax, eax
      jz <else>
      mov eax, b
      test eax, eax
      jnz <else>
      ....


      if(a > b) { ...

      mov eax, a
      cmp eax, b
      jbe <else>
      ....

      или что-то типа того.
      Ответить
    • 1. Скомпилируется
      2. Понимать нужно буквально: если из a не следует b
      3. Паскаль отучает мыслить прямолинейно и писать то, что думаешь, и как раз провоцирует на создание говнокода.
      4. Это никакой не говнокод; человеку, который более программист, чем математик, вполне простительно заменить привычное !(a<=b) на a>b.
      Ответить

    Добавить комментарий