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

    −48

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    uint8_t n1[][2] = {{1,2}, {3,4}, {5,6}, {99,88}};
        uint8_t n2[][2] = {{7,8}, {9,10}, {11,12}, {99,88}};
        uint8_t n3[][2] = {{13,14}, {15,16}, {17,18}, {99,88}};
        
        // Надо сделать массив из указателей на двумерные массивы    
        uint8_t (*ars[3])[2] = { n1, n2, n3}; // полная херня, нечитаемо
        
        typeof( typeof(uint8_t [2]) *) ars2[3] = {n1, n2, n3}; // можно так
        
        typeof( typeof(uint8_t [2]) *[3]) ars3 = {n1, n2, n3}; // можно еще так
        
        typeof(uint8_t (*)[2]) ars4[3] = {n1, n2, n3}; // во, теперь заебись!

    Почему в Си так по-дебильному надо объявлять всякие массивы указателей на двумерные массивы и тому подобную херню? Через typeof получается куда понятней

    Запостил: j123123, 14 Марта 2016

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

    • > // полная херня, нечитаемо

      а мне читаемо.

      с другой стороны я такой фигни не строю. с крестов в ц перенес привычку typedef'ами объявления и типы объяснять.

      #include <stdint.h>
      typedef uint8_t n32_t[4][2];
      n32_t n1 = {{1,2}, {3,4}, {5,6}, {99,88}};
      n32_t n2 = {{7,8}, {9,10}, {11,12}, {99,88}};
      n32_t n3 = {{13,14}, {15,16}, {17,18}, {99,88}};
      n32_t *ars[3] = { &n1, &n2, &n3 };
      Ответить
      • typedef uint8_t n32_t[4][2]; проканает только если ты точно знаешь длину каждой штуки.
        Ответить
        • ну если ты сам такой не догадливый, дай помогу тебе первый шаг сделать:
          typedef uint8_t u8pair_t[2];

          дальше как делать сам догадаешься?
          Ответить
          • Да я отлично всем этим владею. Давай лучше через структуры долбиться

            typedef struct { uint8_t ar[4][2];} arr;
            arr n1 = {{{1,2}, {3,4}, {5,6}, {99,88}}};
            arr n2 = {{{7,8}, {9,10}, {11,12}, {99,88}}};
            arr n3 = {{{13,14}, {15,16}, {17,18}, {99,88}}};
            arr ars[] = {n1, n2, n3}; // так ведь намного лучше!


            Тут четко известны размерчики этих массивчиков, что они 2 на 4, и мы можем линейно их упаковывать
            Ответить
            • Нужно больше скобок!
              Ответить
              • Лисп к вашим услугам
                Ответить
                • Скажите, от него какой-то прок есть, или лишп - это троллинг такой?
                  Ответить
                  • Для прагматичного немецкого программиста - нету. Можешь не париться.
                    Ответить
                  • Лисп - он для души
                    Не парься, у тебя души все равно нет
                    Ответить
                    • > Лисп - он для души
                      вы в душе тот ещё извращенец, сударь
                      Ответить
                      • не то слово, у меня там хаскелль и J
                        Ответить
                        • Как они все влезли под один душ?
                          Ответить
                          • ты что, бариста?
                            Уноси свои шутки по триста
                            Пока не по звал тракториста
                            БЫЫЫЫЫСТРА
                            Ответить
                • Как люди доходят до функциональных яп?
                  Ответить
                  • лисп не функциональный
                    по крайней мере, не все его диалекты
                    Ответить
                    • он такой - не рыба не мясо. Толи дело Хаскелль^_^
                      Ответить
                      • И все же, кегдуша, как дошел до этого? Как шарпист шарписту.

                        А что насчет фа диез?
                        Ответить
                        • фадиез не залетел

                          я на ним начинал, потом увидел хаскелль и все...

                          Не знаю, они просто охуенные
                          Ответить
                          • А J#, вероятно, ещё круче, чем C# и F#?

                            P.S. Смотрите, что нашёл:
                            http://homepages.inf.ed.ac.uk/stg/research/Psharp/
                            Ответить
            • стуктурчики лучшие массивчиков

              их хоть вернуть можно (хотя в stdcall они все равно в *AX не влезают и вертаются через ссылко)
              Ответить
    • Потому что когда создавался Си, люди, которым нужны были "двумерные массивы и подобная херня" пользовали Фортран?
      Ответить
      • как говаривал Керниган - «Если тебе нужен PL/1, ты знаешь, где его взять.»
        Ответить
        • > Керниган
          Сначала прочитал как Кегдан, потом как Керриган...
          Ответить
          • Пирамида потребностей борманда
            1. Говнокод
            2. Старкрафт
            3. Сишка
            Ответить
            • Не, я в стар почти не играл... Ну пройти прошёл, но по сети не задрачивал.
              Ответить
              • Ну тогда как то так

                1. ГовнотА
                2. ИгротА
                3. РаботА
                Ответить
                • АнимотУ забыл.
                  Ответить
                  • смотри пункт 1
                    Ответить
                    • После переезда работа таки всплыла на первое место. Там даже ГК некогда почитать...
                      Ответить
                      • главное что бы радовала. Вот меня программирование не радует а ввергает в пучину отчаяния
                        Ответить
                        • Тут такие баги порой приходят, что можно по ним детективы писать :)

                          > ввергает в пучину отчаяния
                          Вай?
                          Ответить
                          • ) Шерлок Логс и доктор Парсинг
                            Ответить
                          • поделись детективами
                            вот, к примеру, из моей практики: как-то один наш демон вдруг начал убиваться девятым сигналом
                            расследовать это было очень весело, поскольку в юзерспейсе этот сигнал не ловится
                            Ответить
                            • Убийца дворецкий.
                              Ответить
                              • Юзерецкий
                                Ответить
                                • Убий цад ворецкий.
                                  Ответить
                                  • Урфин Джюс, отсыпь мне немного твоего волшебного порошка!
                                    Ответить
                                    • Вореции закончились.
                                      Ответить
                                      • Та встреча не чета простой удаче,
                                        Была любовь и было всё иначе.
                                        И вот среди друзей я, как в пустыне,
                                        И что мне от любви осталось ныне,
                                        Только имя...

                                        Вореции , Вореции ,
                                        Вореции , Вореции .
                                        Вореции , Вореции ,
                                        Вореции , Вореции .
                                        Вореции , Вореции ,
                                        Вореции .
                                        Ответить
                                • нет, всё было веселее
                                  Ответить
                              • почти, убийцей был сторож
                                Ответить
                                • Вотчдог?
                                  Ответить
                                  • это было бы слишком банально

                                    короче, некий 3rd party софт шёл вместе со скриптом, который его стартует и стопит, и в котором, как оказалось, зачем-то переизобрели половину system V init'а с pid-файлами и поэтессами
                                    наш софт вертится на жутко распределённой и отказоустойчивой ну, так пишут в рекламных проспектах системе, которая в случае, если большой пиздец происходит на отдельном блейде, умеет быстренько перемещать процессы на другой
                                    ну и там естественно есть некий shared storage, который виден со всех блейдов
                                    этот "инит-скрипт" на подобный rocket science не был рассчитан, и pid-файл он хранил в некой стандартной линуксовой директории, которая у нас оказалась shared

                                    когда происходил пиздец дочернему процессу, или по команде свыше, инит-скрипт пытался рестартануть демона (в лучших торадициях OTP::let it crash)
                                    а вот когда пиздец в каком-то (произвольном) месте эскалировался в пиздец всего блейда, этот скрипт всё равно упорно пытался рестартануть свой демон, только вот он уже был к тому времени на совсем другом хосте
                                    а pid-файл, как мы помним, был на shared storage...

                                    самое обидное, что от этой хуйни с примерно равной вероятностью дохли процессы, относящиеся к разным подсистемам, но тестировщик почему-то выбрал нас
                                    Ответить
                                    • так а нельзя было straceом посмотреть кто kill вызвал?
                                      Ответить
                                    • вот до чего доводят system v init скрипты

                                      Ваш Ленни
                                      Ответить
                    • Monster Monpiece тоже в говноту запишешь? :)
                      Ответить
                      • я не знаю что это

                        вот список годных на мой взгляд анимэ

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

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

                          > последняя серия евы
                          А как же EoE?
                          Ответить
                          • у меня не было плойки. денди и сразу комп

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

                                Дошло до того, что если игры в стиме нет, то я ее даже с торента не качаю - умерла так умерла
                                Ответить
              • >не задрачивал.
                И не надо. Сколько времени я на первый проебал, тьху нахуй. И дошел-то до D+
                Ответить
      • да и вообще: это в современных ЯП всякие деревья, двумерные массивы и иже с ними реализованы или в языке или в стандартной либе

        в 1972м году это было не так:)
        Ответить
    • > Почему
      Потому что нинужны.
      Ответить
      • И указатели на функции в сишечке тоже не нужны...

        В крестах хотя бы std::function<> пишется по-человечески.
        Ответить
        • >>И указатели на функции в сишечке тоже не нужны...
          вот сейчас половине Win32API с её колбаками и SEH обидно было!!!
          Ответить
          • У таких тупых стервозных сучек, как ВинАПИ, не может быть чувств.
            Ответить
            • тебе просто csrss не давал, вот и сердишься
              Ответить
    • потому что массив указателей на массив это довольно сложная структура
      вот и описывать её сложно
      именно для таких случаев и изобрели дайпдеф

      но скажу тебе по секрету: я сам иногда туплю когда мне нужно написать "указатель на функцию которая возвращает структуру и принимает массив указателей на другие функции"

      с другой стороны мне это никогда и не нужно
      Ответить
    • typeof не является стандартной функцией языка
      Ответить
    • Лучше всех с этим в Модуле-2 / Обероне:
      TYPE MyStructure = ARRAY 3 OF POINTER TO ARRAY OF ARRAY OF CHAR;
      VAR m: MyStructure;
      BEGIN
        NEW(m[0], 4, 2); (* Создать в первой ячейке двумерный массив 4 на 2 *)
        ...
      Ответить

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