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

    −47

    1. 1
    2. 2
    UCHAR *iEarray[100];                                                
    for(int i=0;i<100;iEarray[i++]=0);

    memset() уже не в моде )))

    Запостил: appach, 10 Февраля 2016

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

    • И тела циклов - тоже.
      Ответить
      • Зато покажешь всем свой for(Node n=head; n.next!=null; n=n.next); и они как ахуеют.
        Ответить
        • > for (Node n = head; n != null; n = n.next) { ... }
          Имхо, нормальный код. Тут же ничего лишнего в шапку цикла не затащили, только то, что реально относится к итерированию.

          P.S. Твой оригинальный код словит NPE на пустом списке.
          Ответить
          • Это давно уже макрят, типа:
            #define FOR_EACH_NODE_IN_LIST(iterator, list_head) \
                for((iterator) = (list_head); (iterator) != NULL; (iterator) = (iterator)->next))
            Ответить
          • Не могу понять как тут NPE словить. не си-бог
            Node n = head;
            LABEL: if (n == null) {
                goto STOP;
            }
            { ... }
            n = n.next;

            goto LABEL;
            STOP
            Ответить
            • Ты в n.next != null на первой же итерации null разадресуешь.
              Ответить
              • Пардон, ошибка-описка.
                for(Node n=head; n!=null; n=n.next);
                Ответить
        • И как начнут бить тебя ногами по лицу...

          Не правильно ты, дядя Федор, проверку делаешь, n то нулл может быть

          А, дядя Борманд уже сказал
          Ответить
    • > memset() уже не в моде )))
      Компилятор может запросто решить что memset() там не нужен
      и дропнуть его вызов, особенно в релизе.
      А в этом массиве какой нибудь пароль....
      А потом еще орут типа: "аааа, блять , нас сломалииии..."
      Пока у вас мозги работать не начнут как ломали так и будем ломать.
      Нашли говнокод, умники бля.
      Ответить
      • Компилятор точно так же может решить что там не нужен цикл. Цикл удалить даже проще чем мемсет: доступа к исходникам мемсета у компилятора обычно нет, и нужно разработчикам компилятора явно прописывать поддержку этой оптимизации.

        Использовать чтобы ГАРАНТИРОВАНО не удалило нужно либо volatile, либо АПИ платформы.
        Ответить
        • Ну если глобальная оптимизация отключена - достаточно спрятать свой secure_memset в отдельный юнит трансляции и никуда он не денется.
          Ответить
        • можно еще пустую асмовставку вставить, которая якобы меняет память
          Ответить

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