1. Си / Говнокод #405

    −276.5

    1. 1
    ++i--;

    Операция "подергивание"

    Запостил: guest, 16 Января 2009

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

    • [:]/\/\/\/\[:]:
      Операция "аккордеон", или кипячение.
      Ответить
    • Smoke:
      жестокий баян с баша
      Ответить
      • с баша? а С поди и вовсе на луркморе придумали?
        Ответить
    • ft:
      [quote=Говногость]жестокий баян с баша[/quote]

      #92952 [ + 845 ? ] [:||||:] утверждена 2007-01-20 в 22:44
      Ответить
    • sss:
      ну вообще идея говнокода есть, присваивание пред. значения
      j = ++i--;
      Ответить
    • zzzz:
      так лучше
      while(true)
      {
      ++i--; 
      }
      Ответить
    • > ну вообще идея говнокода есть, присваивание пред. значения j = ++i--;

      А теперь берешь в руки стандарт и вдумчиво читаешь про sequence points. Твой код невалиден, значение j не определено (зависит от конкретной версии компилятора, и далее от расположения зведз на небосводе).
      Ответить
    • An expression is a sequence of operators and operands that specifies computation of a
      value, or that designates an object or a function, or that generates side effects, or that performs a combination thereof.

      Between the previous and next sequence point an object shall have its stored value
      modified at most once by the evaluation of an expression. Furthermore, the prior value
      shall be read only to determine the value to be stored.

      This paragraph renders undefined statement expressions such as
      i = ++i + 1;
      a[i++] = i;
      while allowing
      i = i + 1;
      a[i] = i;

      Так что результат выражения "--i++;" не определен, и не определено значение i.
      Ответить
      • и где здесь использование i в левой части выражения?
        Ответить
    • Orqodox:
      Ну при чём здесь sequence points? Не "результат выражения --i++ не определён", а выражение --i++ синтаксически неверно! Потому что i++ вообще не является lvalue (ни в Си, ни в плюсах, хотя правила там разные). А если компилятор это во что-то компилит, кроме сообщения об ошибке, то это плохой, негодный компилятор.
      Ответить
      • так зато --i является lvalue... которую потом можно inc
        Ответить
        • > --i является lvalue
          В си, емнип, не является. В крестах, емнип, является.
          Ответить
          • В С++ оператор -- возвращает T&
            Ответить
            • Ага. А в си, которому внезапно посвящен этот топик, ссылок нет. Поэтому там не прокатят ни i++ ни ++i;
              Ответить
    • Баянище
      Ответить
    • Убить всех человеков!
      Ответить
    • (--i)++;
      Ответить

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