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

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    // https://youtu.be/KdZ4HF1SrFs?t=4473
    // про питоновский for
    
    for x in 1, 5, 2, 4, 3
        print(x**2)
    
    
    //> написать это в две строки у вас не получится
    
    for(struct {size_t cnt; int arr[5];} i = {0, {1,5,2,4,3}}; i.cnt < sizeof(i.arr)/sizeof(i.arr[0]); ++i.cnt )
      printf("%d ", (int)(pow(i.arr[i.cnt], 2) + 0.5) );

    В Си я могу и в 1 строку эту хуйню написать.

    Запостил: j123123, 28 Мая 2020

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

    • Только вот бигинтов из коробки нет, и возведение в степень только плавучепитуховое
      Ответить
    • // именно поэтому я за с++
      for (auto x : {1, 5, 2, 4, 3})
          std::cout << (x * x) << std::endl;
      Ответить
      • Макрохуйня спешит на помощь
        #define FOR_RANGE(type, varname, ...) for(struct {size_t cnt; type arr[5];} i = {0, __VA_ARGS__}; i.cnt < sizeof(i.arr)/sizeof(type); ++i.cnt )
        
          FOR_RANGE(int, i, {1, 5, 2, 4, 3})
            printf("%d ", (int)(pow(i.arr[i.cnt], 2) + 0.5) );
        Ответить
        • Сделай себе прививку от вируса - помоги мне.
          Ответить
        • #define FOR_RANGE(type, varname, ...) for(struct {size_t cnt; type arr[  sizeof( (type[])__VA_ARGS__)/sizeof(type)  ];  } i = {0, __VA_ARGS__}; i.cnt < sizeof(i.arr)/sizeof(type); ++i.cnt )

          пофиксил
          Ответить
          • Блядь, до чего опустился говнокод. Обсуждают как в одну строку сделать foreach.
            Ответить
          • #define FOR_RANGE(type, varname, ...) for(struct {size_t cnt; typeof(type) arr[  sizeof( (typeof(type)[])__VA_ARGS__)/sizeof(type)  ];  } varname = {0, __VA_ARGS__}; varname.cnt < sizeof(varname.arr)/sizeof(type); ++varname.cnt )


            Еще немного пофиксил. Теперь должно быть норм
            Ответить
            • Не работает. Пишет:
              <source>(7): warning C4116: unnamed type definition in parentheses
              <source>(7): error C2061: syntax error: identifier 'typeof'
              <source>(7): error C2078: too many initializers
              <source>(7): error C2143: syntax error: missing '{' before '.'
              <source>(7): error C2059: syntax error: '.'
              <source>(7): error C2059: syntax error: '++'
              <source>(7): error C2059: syntax error: ')'
              <source>(10): error C2059: syntax error: '}'
              Ответить
              • #include <stdio.h>
                #include <stdlib.h>
                #include <stddef.h>
                #include <math.h>
                #include <type_traits>
                
                #define krestogovnotypeof(a) std::remove_reference<decltype((a){})>::type
                
                #define FOR_RANGE(type, varname, ...) for(struct {size_t cnt; krestogovnotypeof(type) arr[  sizeof( (krestogovnotypeof(type)[])__VA_ARGS__)/sizeof(type)  ];  } varname = {0, __VA_ARGS__}; varname.cnt < sizeof(varname.arr)/sizeof(type); ++varname.cnt )
                
                int main(void)
                {
                  FOR_RANGE(int, k, {1,2,3,4,5,6,7})
                    printf("%d ", (int)(pow(k.arr[k.cnt], 2) + 0.5) );
                  return EXIT_SUCCESS;
                }
                Ответить
                • https://wandbox.org/permlink/p0DnxIxiVmK3C1XC

                  Что-то долговато компилируется эта крестопараша, в отличии от сишки. Поэтому я за Си
                  Ответить
                  • https://stackoverflow.com/questions/6707148/foreach-macro-on-macros-arguments
                    Тут посоны писали for~each для препроцессора.

                    Там один интереснейший трюк показан.
                    Ответить
                    • если у тебя будет в эту __VA_ARGS__ хуиту передаваться дрисня типа {a, b}, {c, d}, {e, f}
                      то она разберется на аргументы не как '{a, b}', '{c, d}', '{e, f}'
                      а как '{a', 'b}', '{c', 'd}', '{e', 'f}'
                      Там эта проблема решается?
                      Ответить
                      • Сколько умных слов... Жаль, без практического применения.
                        Ответить
                  • Кстати, я так и не понял, что там по поводу компиляции в C++?
                    - JS был настолько нестерпим, что для него это дело уже наладили (CoffeeScript, TypeScript, ECMAScript2016,17,18,..., тонны питушни).
                    - C тоже был нестерпим, в какую-то сиштушню компилируют Haskell.

                    Когда для удобной конструкции нужен пердолинг с макросами и шаблонами, но C++ всё ещё не получается выкинуть из-за полезных фич и легаси, нужна компиляция языка с нормальным синтаксисом в C++.

                    Кроме ASD77 кто-нибудь сделал что-то полезное для C++?
                    Ответить
                    • Так сводят же к промышленно полезному минимуму.
                      js — сишка вёба.

                      К тому же их дополнительно урезают. С до С--.
                      js до asm.js
                      Ответить
              • А это ж сраная говновижуальная студия...
                https://godbolt.org/z/ht_3qm вот я вроде уже почти портировал. Надо реализовать хуйню, которая б считала аргументы

                Скажем, если будет фигня типа
                {123, "ffft"}, {123}, 4, 666
                то надо чтоб было 4 аргумента.

                Можно реализовать это на крестопарашных констэкспрах, распарсивая стрингифицированные аргументы.
                Собственно, вот почти корректная реализация: https://govnokod.ru/26703
                Ответить
    • Перевёл на J:
      echo @ *: 1 5 2 4 3
      Ответить
      • Всё сходится. Ебанутый ник, “J”. Это нидлесс.
        Ответить
        • Он пейсал ещё на JS в соседнем треде. Мне кажется, ему на рынке завернули кусок сала в лист программистской энциклопедии на букву J.
          https://www.anekdot.ru/id/-10047486/
          Ответить
        • Странно. А почему тогда джаваскрипт а не луа?
          Ответить
    • На шпиль собора Святого Иакова в Риге вернули петуха

      На шпиль кафедрального собора Святого Иакова в Риге вернулась отреставрированная
      фигура петуха, сообщает Rus.delfi.lv.
      
      Внутрь фигуры поместили послание потомкам от церкви, правительства и реставраторов.
      Архиепископ-митрополит Латвийской римско-католической церкви Збигнев Станкевич
      в своем послании акцентировал внимание на молитве за Латвию и Европу.
      
      Петух был снят со шпиля собора 3 апреля. Мастера отремонтировали фигуру и заново
      покрыли золотом. В предыдущий раз петуха снимали со шпиля 38 лет назад.
      Ответить
      • Иди оффтопь в другое место, тут для другого тред.
        Ответить
      • Петух - не человек. И сегодня ему ему предстоит очень трудная ночь. У него уже 38 лет каждая ночь была трудной...
        Ответить
      • петуха посадили на шпиль, ахахахахахахахах
        Ответить
        • Теперь понятно, зачем те мужики хотели посмотреть на шпиль.
          Ответить
    • #define FOR_RANGE(type, var, ...) for (type arr_[] = __VA_ARGS__, *end_ = arr_ + sizeof(arr_) / sizeof(arr_[0]), *var##_ = arr_, var = 0; var##_ != end_ && (var = *var##_); ++var##_)
      
      FOR_RANGE(int, i, {1, 5, 2, 4, 3})
          printf("%d\n", i * i);
      Ответить
    • Более того, в C++ или С оно может быть записано в одну строчку.
      Ответить

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