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

    +146

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    #include <fcntl.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    
    // man sendfile
    
    int main (int argc, char **argv, char **envp) {
      while(
    	  (
    	    argc < 0 // true if all ok, false on first iter
    	    ||  
    	    (
    	      argc != 2 // true if error
    	      && 
    	      (printf("usage %s filename\n", argv[0]) && 0 == (argc = 0))// show error (true)
    	    ) // true if error, and argc == 0
    	    ||
    	    (
    	      ((argc = open(argv[1], O_RDONLY) * -1) < 0) // false if error
    	      ||
    	      (printf("cannot open %m\n") && 0 == (argc = 0))// show error (true)
    	    ) 
    	  ) // true if all ok, also argc != 0
    	  && 
    	  (
    	    argc < 0 // if open success this is true
    	    &&
    	    (read(argc * -1, memset(envp[1], 0, 1025), 1024) > 0 && printf("%s", envp[1])) || (close(argc * -1))
    	  )
           ) ;
    }

    работает и под linux и под cygwin (gcc какие были под рукой)

    затрудняюсь определить парадигму :)

    Запостил: Anonimous, 09 Декабря 2010

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

    • Что за %m в формате ?
      Ответить
    • Парадигма -- понты.
      Ответить
      • а код по душе. написан стильно. поставленную задачу, думаю он реализует.
        не удивлюсь, что им был выигран какой-нить спор.
        плюсану за оригинальность
        Ответить
        • Наверняка. Такое пишут только на спор, на специальные конкурсы или просто покрасоваться.

          Во всяком случае здесь ему не место. За это и минусанул.
          Ответить
          • Наоборот, такое тут принято плюсовать, потому что это весёлое, продуманное говно. А унылое говно (типа код без форматирования) никому не интересно, его минусуют.
            Ответить
        • Судя повсему была задача выдать содержимое файла на экран, помощь и обработку ошибок, не пользуясь переменными. В качестве переменных были задействованы аргументы и хранилище окружения.

          Крута, имхо.
          Ответить
      • парадигма - эзотерика
        Ответить
    • argc < 0

      хм, и часто ли такое бывает?
      Ответить
      • в данном случае на второй и последующих итерациях (вас memset(envp[1], 0, 1025) разве не смутило?)

        задача была (понты как точно выразился уважаемый gegMOPO4): вывести содержимое файла на консоль с проверками при помощи одного пустого цикла и не объявляя никаких переменных
        Ответить
    • показать все, что скрытоМой выход:
      А на Паскале такое не скомпилится! Такой ужас можно написать только на Си! Си - это настоящее недоразумение!
      Ответить
      • Си то как раз замечателен и никак пытается исскуственно не ограничивать программиста. А вот сами программисты бывают всякими.
        Ответить
        • Я понял бы отсутствие исскуственных ограничений скажем в пыхе и ас3.. Но у языка с доступом к железу надо на этапе компиляции отсеивать идиотов
          Ответить
          • Идиотов должен отсеивать не язык, а, например, работодатель. А язык должен в каком-то смысле удовлетворять прихоти программиста.
            Ответить
        • Ага, пиши чего хочешь, а я потом может быть разберусь и откомпилирую...
          Хотя что это я, сишникам типизированных ЯВУ в жизни не понять...
          Ответить
          • Не понял вашей мысли. Если программист достаточно разумен и желает, чтобы его код могли сопровождать другие люди, то он напишет код как полагается. Вводить ограничения в язык ради того, чтобы программист всегда вынужден был делать каким-то особым образом (не всегда даже более наглядно) - IMHO, бред полнейший.
            Ответить
            • > Если программист достаточно разумен и желает
              изначальное допущение порочно, нет?
              я даже в интернетах сайт видел, так и называется -- говнокод :)
              Ответить
            • Ну вот принцип Питона: "есть только один и только один способ сделать что-либо".

              Это приводит вот к чему — новичок и профессионал пишут одинаково, следовательно новичок может понимать, что написал профессионал.

              Так хочет создатель Питона, и это мнение имеет право жить.

              Лично я не говорю, что это хорошо. Я говорю, что это НЕ плохо.
              Ответить
              • > есть только один и только один способ сделать что-либо
                Умножение через сложение уже нельзя ?
                Ответить
                • можно. абсолютно всё не учтёшь.
                  однако ж, код должен быть понятен, как профессионалу, так и новичку.

                  Я, если что, не Питонист.
                  Ответить
              • принцип Питона: "есть только один и только один способ сделать что-либо".
                принцип Перла: "есть тысяча и один способ сделать что-либо. И еще десяток можно придумать".
                принцип ПХП: "есть только один и только один способ сделать что-либо. И способ этот -- через жопу"
                принцип Java: "есть только один официальный способ сделать что-либо. Но он так не популярен, что им никто не пользуется. Еще есть 44 способа сделать тоже самое, с использованием сторонних опен-сурс библиотек. Обычно пользуются ими"
                Принцип C# "есть три способа сделать что-либо руками: для бывших сишников, выбвших джавистов и бывших ВБшников. еще три сделать это мышкой. еще один -- визардом. Причем последний -- рекомендуемый".
                Ответить
      • >А на Паскале такое не скомпилится!
        ты так говоришь будто это хорошо
        Ответить
        • Да, это хорошо. Лучше потратить лишние 10 минут при набивании кода, чем час при отладке.
          Ответить
          • а кто заставляет писать код именно так?
            Керниган?
            Ритчи?
            обычно на крупных проектах есть оговоренный стиль написания кода: как скобки ставить, как переменные именовать итд.
            Ответить
            • Помимо скобочек в Си есть куча других способов написать одно и тоже 10ю неочевидными способами.
              Ответить
    • O_RDONLY?

      YA_RDONLY!
      Ответить
    • гавно говном: логика через жопу описаная; memset(envp).
      Ответить

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