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

    +131

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    struct tm * localtime (const time_t * timer);
    
    A pointer to a tm structure with its members filled with the values
     that correspond to the local time representation of timer.
    
     The returned value points to an internal object whose validity or
     value may be altered by any subsequent call to gmtime or localtime.

    Я нуб, впервые вижу такой способ вернуть структуру.

    Запостил: TarasB, 18 Октября 2014

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

    • Возвращает указатель на статическую переменную? а в чем прикол?
      Ответить
      • Да не, никакого прикола нет. Просто во времена когда эта функция создавалась, ничего зазорного в этом не видилось.

        А сейчас породило кучу реентерабельных функций типа localtime_r:
        struct tm *localtime_r(const time_t *timep, struct tm *result);
        Ответить
        • и как тут реентерабельность реализована?
          Ответить
          • показать все, что скрытоТы бы смог выебать парня? Только честно! )_
            Ответить
          • Ну буфер назначения передается явно вторым аргументом. Или тебе интересны глобальные локи в __tz_convert в Glibc? :)
            Ответить
            • И оно тупо возвращает указатель, который ему передали?
              Ответить
              • > И оно тупо возвращает указатель, который ему передали?
                Так в С многие функции возвращают переданный им указатель. ФУНКЦИОНАЛЬНЕНЬКО же.
                Ответить
                • И в дельфятине есть такое же сишкоблядство, а именно функции для работы с ASCIIZ-строками (PChar), когда хрен поймёшь, новый указатель возвращает функция или тот же самый, что ей передали.
                  Ответить
        • Почти вся сишная либа - набор унылых, хреново продуманный костылей. unistd.h и тот в тыщу раз лучше и удобнее.
          Ответить
          • > хреново продуманный костылей
            Зато в какой-нибудь жавовой либе костыли наверное, наоборот, энтерпрайзные ;)
            Ответить
            • В жабе тоже кунсткамера костылей. Чего только стоят Properties (замечательный пример того, к чему приводит наследование ради реализации), JSONObject (нужно больше проверяемых исключений на немыслимые ситуации) и URL (как не надо писать equals).
              Ответить
              • Плохой из тебя Конардо.
                Ответить
              • >Чего только стоят Properties
                А что с ними не так?
                Ответить
                • Наследование ради реализации. И как результат - затыкание протёкшей абстракции предостережением в доке.

                  Because Properties inherits from Hashtable, the put and putAll methods can be applied to a Properties object. Their use is strongly discouraged as they allow the caller to insert entries whose keys or values are not Strings. The setProperty method should be used instead. If the store or save method is called on a "compromised" Properties object that contains a non-String key or value, the call will fail. Similarly, the call to the propertyNames or list method will fail if it is called on a "compromised" Properties object that contains a non-String key.

                  HashMap нужно было припрятать в приватное поле, как деталь реализации, а не наследоваться от него...
                  Ответить
                  • А. Ну бывает. У Блоха это всё расписано. Просто Properties ввели до женериков.
                    Однако даже зная о вредности наследования бывает использую его вместо оборачивания (у меня ДЕКОРАТОР от десятка унылых бесполезных методов). И сцука почти всегда жалею, потом переписываю на обертку. В последний раз в 8-ой яве поменяли внутреннюю реализацию этого самого HashMap и оно наебнулось.

                    Короче в ооп и жабе, как самом чистом его носителе с этим проёб. Нужен принципиально другой способ композции. Наследование - кал, обёртки - гиперунылы.
                    Ответить
              • >В жабе тоже кунсткамера костылей.
                Потому они так высоко и взлетели. Ошибки молодости, но замечательная обратная совместимость.
                >нужно больше проверяемых исключений на немыслимые ситуации
                Хотя я думаю сделай они checked exceptions опцией компилятора с дефолтным ERROR ничего плохого бы не случилось.
                Ответить
      • показать все, что скрыто-
        Ответить
        • "Чтобы жопа пищала" - уже в 6 раз вижу эту глупую шутку.
          Конардо не был баянистом, да и троллил жёще. У меня от его вбросов стояки были на постой - а сейчас блевать тянет.
          Ответить
          • "Чтобы жопа пищала" - уже в 6 раз вижу эту глупую шутку.
            Конардо не был баянистом, да и троллил жёще. У меня от его вбросов стояки были на постой - а сейчас блевать тянет.
            Ответить
            • "Чтобы жопа пищала" - уже в 6 раз вижу эту глупую шутку.
              Конардо не был баянистом, да и троллил жёще. У меня от его вбросов стояки были на постой - а сейчас блевать тянет.
              Ответить
    • показать все, что скрыто-
      Ответить
    • - Знаю, - улыбнулся я. - Ты мне раз сто уже об этом говорил. Я тебя тоже люблю, Солнышко.
      Ответить

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