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

    −47

    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
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    printf(fmt,x1,x2,x3,x4,x5,x6,x7,x8,x9)
    	char fmt[];
    	{
    	extern printn, putchar;
    	char s[];
    	auto adx[], x, c;
    
    	adx = &x1; /* argument pointer */
    loop:
    	while((c = *fmt++) != '%') {
    		if(c == '\0')
    			return;
    		putchar(c);
    	}
    	x = *adx++;
    	switch (c = *fmt++) {
    
    	case 'd': /* decimal */
    	case 'o': /* octal */
    		if(x < 0) {
    			x = -x;
    			if(x<0) {  	/* is - infinity */
    				if(c=='o')
    					printf("100000");
    				else
    					printf("-32768");
    				goto loop;
    			}
    			putchar('-');
    		}
    		printn(x, c=='o'?8:10);
    		goto loop;
    
    	case 'c': /* char */
    		putchar(x);
    		goto loop;
    
    	case 's': /* string */
    		s = x;
    		while(c = *s++)
    			putchar(c);
    		goto loop;
    	}
    	putchar('%');
    	fmt--;
    	adx--;
    	goto loop;
    }

    from http://minnie.tuhs.org/cgi-bin/utree.pl?file=V2/lib/printf.c

    Запостил: j123123, 06 Апреля 2016

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

    • >auto adx[]
      Где здесь C, j123123?!
      Ответить
      • https://stackoverflow.com/questions/2192547/where-is-the-c-auto-keyword-used

        Это какие-то особые древние говнокоды, и там наверное этот auto был для чего-то нужен. А так он вообще не нужен и никакого смысла не несет.
        Ответить
        • Век живи - век учись.
          Ответить
        • The only time you're allowed to use auto is with a variable that already has auto storage class, so you're just specifying something that would happen anyway. Attempting to use auto on any variable that doesn't have the auto storage class already will result in the compiler rejecting your code.

          Только дзенский мастер сможет применить мощь слова «auto».
          Ответить
          • ну так это с любым дефолтом так

            вот почему переменная, определенная внутри тела функции по-умолчанию автоматическая?
            почему не статическая?
            Ответить
          • как override короче
            Ответить
      • ты лучше вот сюда посмотри
        adx = &x1; /* argument pointer */
        
        x = *adx++;


        и сюда
        if(x < 0) {
        			x = -x;
        			if(x<0) {

        http://melpon.org/wandbox/permlink/NYC3HrbtjLQirvQ6
        Ответить
        • Да, древность-то какая... А сейчас уже не компилится - http://ideone.com/UnivvI.
          Ответить
      • ну привет

        auto это локальная переменная с автоматическим уровнем жизни
        просто последние 40 лет так псать не обязательно
        Ответить
    • > tuhs.org

      The Unix Heritage Society

      круто. не знал. уже качаю.

      "V2" что значит? это SysV2?
      Ответить
    • хэ! ты там суровый перл пропустил! - печатание числа `n` в base `b` -
      printn(n,b) {
      	extern putchar;
      	auto a;
      
      	if(a=n/b) /* assignment, not test for equality */
      		printn(a, b); /* recursive */
      	putchar(n%b + '0');
      }

      блин, за что люблю старый код - это за лаконичность и краткость.
      Ответить
      • Ого! Заслуживает отдельного поста.
        Главное, комменты им писать не лень, а переписать без сомнительных конструкций - лень.
        Ответить
      • >>a=n/b) /* assignment, not test
        и тут такой Вирт пришел и придумал паскаль
        Ответить
        • хехе. в юные паскальные времена мы как раз вот о таком мечтали. потому что паскалевы компилеры говняные были, а вот такие простые конструкции в те времена (1993-5) заметно помогали производительности.

          в те времена все себя уважающие "пасквилянты" должны были еще и асм знать. а "наСильники" спокойно одним С обходились.
          Ответить
          • мне кажется asm тогда знали все
            он был лингва франка для API к PC, BIOS и DOS.
            Ответить
            • нет. в те времена уже были кучи "любителей" которые знали только высокоуровневые языки.

              я знавал кучу физиков которые на Z80 на басике и потом PC и С лобали кучи научного экспериментально софта. (Z80 умер достаточно быстро потому что с касетами/этц данные накрывались часто.)
              Ответить
              • ну математики наверное да, им хватало и паскаля

                я говорю про обычного программера

                z80 был и с дискетами кстати (клон спектрума конечо)
                люди писали под спектрум до конца 90х, а некоторые фанаты фанатят и до сих пор:)

                http://hermitlair.ucoz.com/_pu/0/15780653.jpg
                Ответить
                • > ну математики наверное да, им хватало и паскаля

                  хехе. наивные дети. как раз математики и знали асм. потому что в прошлом программист == прикладной математик.

                  мехмат и физика - те да. но и они же в те времена паскаль обходили потому что в нем single/double числа и арифметика плохо поддерживались/оптимизировались.

                  > я говорю про обычного программера

                  в те времена "обычных программеров" еще не было. профессия еще как таковая (на совке) еще не появилась.

                  компов было много разных - и людей которые их программировали было много разных.

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

                    это очень старые математики, наверное
                    и наврядли они писали под PC

                    >>в те времена "обычных программеров" еще не было.
                    ну я говорю о людях коие писали под PC и писали об этом в фидо)
                    Ответить
                    • > >. как раз математики и знали асм. потому что в прошлом программист == прикладной математик.

                      > это очень старые математики, наверное

                      ну сегодня они уже может быть и старые... :(

                      > и наврядли они писали под PC

                      писали, писали.

                      > > в те времена "обычных программеров" еще не было.

                      > ну я говорю о людях коие писали под PC и писали об этом в фидо)

                      а. FoxPro и Clipper (SQL/этц). плюс кучи софта для DOS/Win3.1/Win95 (кучи С, и немножко паскаля). асм знало на самом деле мало людей. количественно наверное больше уже знало SQL. и по базе 75% Cишники vs. 25% Пасквилянты. (Пасквилянты очень быстро исчезали, потому что Borland был в жопе и человеческого оптимизирующего компилятора не мог сделать аж до Delphi 3.)

                      уже тогда все ВУЗы пытались начинать клепать программистов, потому что благодаря первым офф-шорам и аут-сорсингам было очень выгодно. но клепали то они за 1-2 года на каком С/С++ и только по верхам и только DOS/Windows. архитектуры и асмы уже тогда никого особо не (коммерчески) интересовали. и MS уже тогда завел традицию асм с компилятором больше не поставлять (masm стал частью DDK, а не SDK).
                      Ответить
                      • А где математики начала 90х писали под PC на асме?

                        Люди, которых я наблюдал в 98м году пользовались обычно продуктами borland: это были borland C++ и pascal, и конечно Delphi. Ну и tasm:)

                        VS я увидел немного позже, и хотя masmа в SDK уже не было, но asm вставки-то были вплоть до x64)
                        Ответить
                        • > А где математики начала 90х писали под PC на асме?

                          Везде. От ново-появившейся коммерческого программирования (бухгалтерия) до АН (Академия Наук). Потому что в начале 90х, как я и говорил, это были более или менее единственные профессиональные программисты. Почти все манагеры и лиды в те времена были либо математики либо физики со стажем/профы/доктора.

                          > Люди, которых я наблюдал в 98м году пользовались обычно продуктами borland: это были borland C++ и pascal, и конечно Delphi. Ну и tasm:)

                          Борланд к концу 90х всех клиентов растерял. Потому что лажу за лажей делали. Он популярностью только в Бразилии и в Рашше пользовался. Но догадайтесь сколько денег от этого Борланд имел.
                          Ответить
                          • А какой цимес математику писать математику на asm под x86, который никто как серьезный компьютер-то и не рассматривал до 1993г?
                            Ответить
                            • потому что 8086, хоть и отстой, можно было купить.

                              а "настоящие" компьютеры стоили столько бабла, что на совке их было настолько мало что нормальным людям их существование было почти по барабану.
                              Ответить
                  • За всех математиков не скажу, но у нас в ИПФРАН математики уже несколько десятилетий пишут в основном на Fortran, иногда с вкраплениями C++.
                    В Сарове ситуация аналогичная.
                    Ответить
                    • я не знаю на чем в моей Беларуской АН (НАНБ) писали/пишут. фортрана исключать не стану.

                      я знаком близко был с Институтом Прикладной Физики НАНБ - там все (кто писал) на С писали.
                      Ответить
                    • ты из ВШОПФ что ли?
                      Ответить
                      • > ты из ВШОПФ что ли?
                        Нет, я дипломную работу напросился писать в ИПФРАН. Ничего грандиозного, обычный вычмат.
                        Ответить
    • кстати
      а это еще было же ведь до структурного програмирования?
      Ответить
      • это писалось как раз тогда когда структурное программирование было придумано.

        С был одним из языков который пытался не поддаваться тамошней моде все в ж высокоуровнить, типа как Smalltalk.
        Ответить

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