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

0

  1. 1
printf(" %f %f %f %f %f %f %f %f\n",Xk[0],Xk[1],Xk[2],Xk[3],Xk[4],Xk[5],Xk[6], Xk[7]);

Рад бы был, если б это написали китайцы. К сожалению, дело рук наших соотечественников.

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

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

  • скорее всего тут выводятся результаты какой-то математической штуки - в этом случае красота кода должна идти в баню при сравнении с читабельностью. в данном случае есть одна строка с выводом лога - она быстро и просто может быть как закомментирована, так и поправлена.

    для 8 элементов плодить лишний цикл для вывода тоже не всегда айс. например в такой форме проще дописать названия параметров в выводную строку если они разные для элементов.
    Ответить
    • Соглашусь. У меня как-то выводились кватернионы поворотные, очень удобно одной строкой пользоваться.
      Бывало и говнокодее -- два-три таких printf.
      Подобные выводы, скорее всего, просто отладочные, хочется глазами уследить, что там происходит. А для счёта перекомпилировать, закомментировав вывод.
      Ответить
      • Я вот понимаю, когда в строку пишется 4 элемента. Но не 8. В приведённом случае как раз глазами не уследишь, что там в конце строки происходит. Цикл был бы более гибким решением. И если кодинг идёт в какой-нить более-менее вменяемой среде, то закомментарить это дело - один HOT KEY.
        Ответить
        • в если vim? и во времена широких экранов вся строка видна без проблем..
          Ответить
          • У человека всё равно глаза не как у стрекозы. Длинную строку всю целиком "не осилишь".

            Доведём вашу идею до абсурда и поставим человеку монитор шириной с комнату. И что? Сразу можно писать ВСЮ программу в одну строку?
            Ответить
        • Не соглашусь с вами.

          Типичный printf:

          printf("%.8f %.8f %.8f %.8f %.8f %.8f %.8f %.8f %.5f %d", q[0], q[1], q[2], q[3], q.norm(), fabs(q[1]), fabs(q[2]), fabs(q[3]), rot.angle,rot.madeIter());

          Как такое в цикл?
          А без него у меня всё в точности так, как в командной строке. И переставить легко местами. Захочу, буду рядом выводить q[1] и fabs(q[1]), а захочу и не буду... Всякие циклы, лишние строки, они от дела отвлекают.
          Обычно printf служит именно для быстрой проверки того, что творится внутри кода, а не для красивой записи. То, что в файл, скажем, печатается, ещё может быть определённым образом структурировано для той программы, куда потом отправится, а на экран выводить данные, только чтобы глазом проследить кривую, основные моменты, ошибку отловить.
          Ответить
          • В цикл такое никак. Только в несколько строк.

            Посмотрю я на вас, когда вы случайно поменяете местами выражения разных типов, а команды их форматирования (%d %.8f) забудете. Если не лениться и написать агрегат в несколько строк, то такой проблемы не возникнет. И переставлять легче строки, а не конструкции внутри строки.

            printf прежде всего печатает в консоль. И служит он много для чего. Чем отличается печать отладочных данных от не отладочных? Почему во втором случае разрешается делать говнокод? Непонятно.
            Ответить
            • Написание такого printf у меня происходит на уровне "рефлексов". Я даже не думаю, что пишу. Я пишу и уже вижу столбцы в консоли -- мнемоника. Я отсчитываю слева направо столбики и данные и нахожу ключевые, проблемные имена.
              Я не знаю ни одного живого человека, который бы разбивал такую строку данных на две.
              Уж фортрановцы и подавно всё в одной строке пишут.
              Ответить
            • Да, если перепутать формат и тип данных, то можно ушибиться больно.
              Но со мной это происходило только на младших курсах.
              Ответить
              • Если программа на С++, а не Си, то можно через << (stream) сделать. Там не чего не перепутаешь. А на чистом Си такая проблемка имееться...
                Ответить
                • В потоках есть флаги-манипуляторы выводом. Это из части iomanip. Так если под восьмиричный флаг oct вывести число с точкой, то тоже можно попасть в просак.
                  Ответить
  • Жаль, нельзя написать

    float Xk[8] = {...};
    printf(" %f %f %f %f %f %f %f %f\n", Xk);

    ((
    Ответить
    • Грязный, нелегальный хак, возможно, работающий на некоторых компиляторах

      int main()
      {
      struct X{
      double Xk[8];
      } x = {1,2,3,4,5,6,7,8};
      printf(" %f %f %f %f %f %f %f %f\n", x);
      }
      Ответить
      • только что проверил, действительно иногда работет)))
        #include <stdio.h>
        #define A 9
        #define B A

        int main()
        {
        int x[]={B,012,11,12};
        printf("%d %d %d %d\n");
        }
        Ответить

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

Где здесь C++, guest?!

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


    8