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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
#define N2(n)   #n"0",#n"1",#n"2",#n"3",#n"4",#n"5",#n"6",#n"7",#n"8",#n"9"
#define N30(n)  #n N2(),#n N2(1),#n N2(2),#n N2(3),#n N2(4),#n N2(5),#n N2(6),#n N2(7),#n N2(8),#n N2(9)
#define N3(n,k) #n#k"0",#n#k"1",#n#k"2",#n#k"3",#n#k"4",#n#k"5",#n#k"6",#n#k"7",#n#k"8",#n#k"9"
#define N4(k)   N3(k,0),N3(k,1),N3(k,2),N3(k,3),N3(k,4),N3(k,5),N3(k,6),N3(k,7),N3(k,8),N3(k,9)
#define N5      N30(),N4(1),N4(2),N4(3),N4(4),N4(5),N4(6),N4(7),N4(8),N4(9)

const char s[][4]={N5};
const int s_size = sizeof(s)/sizeof(s[0]);
void print_number(int n) {
    if (n<s_size) {
        printf("!%s\n",s[n]);
    }
    else {
        printf("?%d\n",n);
    }
}

Отсылка к #3376 http://govnokod.ru/3376
Вопрос к общественности: что бОльший говнокод, >100 строк строковых констант или 5-строчный пассаж на макросах?

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

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

  • что это делает?

    Ахахаха, вам пришлось лепить уродливый макрос N30, из-за того, что этот мудак Ритчи сделал числа на 0 восьмеричными!!!!
    Ответить
      • Объясняю: чтобы сгенерировать перечисление
        "000", "001", "002", ..., "099", "100", ..., "999", можно составить намного более простой макрос. Но лидирующий ноль в СИ меняет смысл числа, такой вот уродливый костыль
        Ответить
        • макро-ориентированное программирование какое-то.
          кстати, не только в Си
          Ответить
        • Более читабельные альтернативы всегда есть.
          Это в любом случае говнокод, которого можно было избежать.
          Ответить
        • Во-первых: в примере выводятся строки, и совершенно не важно скольки -ичное этой строкой представляется число.
          Во-вторых: даже если нужно преобразовать строку в число, всегда есть возможность указать формат %d, %o, %x и т.д.
          Ответить
    • основание системы счисления совпадает с количество хватательных конечностей у Ритчи и Кернигана...
      случайно ли это?
      Ответить
  • > что бОльший говнокод, >100 строк строковых констант или 5-строчный пассаж на макросах?

    5-ти строчная маструбация макросов само собой разумеется большее ГК.

    100+ строк констант генерятся тривиальной программой - сырец которую можно включить внутри комментария к файлу. (для юнихов: "геренерятся одной строкой в шелле".)

    а вот те 5 строк..... я думаю их написать и протестировать понадобилось на порядок больше времени.
    Ответить
    • О, да, пришлось постараться.
      Есть еще вариант проинициализировать массив при запуске программы, но мороз по коже пробегает от мысли о микроватт-секундах, которые будут на это тратится при каждом запуске. Кроме того, на Си статическую инициализацию красиво сделать не получится.
      Ответить
      • > но мороз по коже пробегает от мысли о микроватт-секундах, которые будут на это тратится при каждом запуске

        пусть тебя утешает то что на С++ это все еще хуже 😉

        в С++ не только время на старте -для инициализации статических объектов- тратится, но так же еще и время при завершении программы - на вызовы всех деструкторов.
        Ответить
      • Вообще, для оптимизации. Но пост не о целесообразности такой оптимизации. Это обсуждалось в #3376. А о том, как можно извратиться макросами и обойтись без генератора кода.
        Ответить
        • > как можно извратиться макросами и обойтись без генератора кода.

          1. если Винды или Жаба. программы перезапускаются редко - т.к. традиционно создание нового процесса относительно медленно - используй программную инициализацию: цикл где в начале встраиваешь (например в красивый объект завернутый) и забывашь про него.

          2. если Линухи/Юнихи. не еби людям мозги. естче наши духовные лидеры товарищи Денис/Ритчи завещали, что надо учится не просто писать программы, а писать программы которые будут писать программы для нас. и мля сгенерировать такой файл можно либо внешним скриптом либо прямо в Makefile'е. пять минут и готово.
          Ответить
  • На С++ можно было-бы через метапрограммирование все это реализовать на этапе компиляции, но это Си...
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

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


    8