Няшная / Говнокод #2403 Ссылка на оригинал

0

  1. 1
si_node_append(&(*config), si_node_create_ex(param_name, param_value, param_flag)); // ...to the end

Смысл операции &(*var) непонятен.
Отдельного внимания заслуживает коментарий... мне удалось воткнуть :) оказывается, имелось в виду не "вперед, до самого конца", а "добавляем в конец списка", ага.

Правда, был круче комент в одном месте... "redirect of conclusion"...
В общем, когда вкурил что имелось в виду "перенаправление вывода", чуть не сдох со смеху :)

Запостил: Pencioner Pencioner, (Updated )

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

  • &(*var)

    Смысл разве что такой. В функцию передается ссылка на безымянную временную переменную, в которой лежит копия того, на что указывает var. То есть, если функция меняет значение первого параметра, значение *var не изменится.
    Ответить
  • Да это чистый си 🙂

    &(*var) результатом дает значение var
    Того же самого можно получить написав var без извращений 🙂
    Уж думал, искал тайный смысл... но увы
    Ответить
    • Может, сначала передавался не указатель, а потом оптом все заменили на указатель?
      Лично я люблю по всему коду шило менять на мыло. Автоматически, потому что emacs.
      Ответить
      • скорее всего, но то что человек этот не под емаксом работает, 100%. менял руками, бездумно...
        нельзя так 🙂
        Ответить
    • народ такое иногда в макросы пихает как проверка на то что параметром передается переменная, а не константа. у констант нет адреса и как следствие компилятор ругатся начинает.

      я подобное иногда пишу когда хочу подчеркнуть что передается нечто по аддресу и как следствие может быть изменено внутри вызываемой функции.
      Ответить
  • Эта конструкция (&(*pointer)) называется "ссылка на указатель". Позволяет изменять не только данные, на которые указывает указатель, но и сам указатель, а точнее адрес, хранящийся в переменной var.
    То есть если имеется следующая процедура :
    void foobar(char *&p) {
       *p = 'X';  //1
       p = NULL; //2
    }
    char c = 'A';
    char * p = &c;
    foobar(p);

    В данном случае, при возврате из функции foobar указатель p будет равен NULL, чего бы не произошло, если бы формальный параметр был объявлен не как char *&p, а как char *p.
    Ответить
    • В си нет ссылок. И в остальном ты нагнал пурги.
      Ответить
    • нифига, в чистых си нет ссылок - раз, во вторых это не декларация переменной, а оператор взятия адреса. адрес обьекта (*ptr) т.е. обекта, размещенного по адресу, указанному указателем ptr, равен ptr. однозначнейше...

      и никакими простите формальными параметрами не пахнет... пахнет особым видом кода только ))))
      Ответить
    • Когда было сказано "это не декларация переменной, а оператор взятия адреса", то имелся в виду тот кусок что я постил а не Ваш кусок кода. в вышеприведенном - это декларация ссылки на указатель. у меня же - унарная операция взятия адреса...
      Ответить
  • в первом посте был правильный ответ.
    класс может переопределять опреатор * так как это делает итератор...
    Ответить
    • не обратил внимания что это С... в С++ у меня полно таких конструкций...
      Ответить
    • Гы 🙂 переопределение операторов имхо фетиш Страуструпа и несколько портит в плане механизмов говнокодирования в общем-то хороший язык 🙂
      Ответить
      • я пользуюсь... мне нравится... очень удобно при написании прокси-классов...
        Ответить
        • Да в самой концепции особо плохого на самом деле нет, но... многие пользуются в ущерб... а ущерб этот часто и приводит к тому что надо всякие штучки типа прокси классов 🙂

          джаст имхо
          Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8