1. C++ / Говнокод #1768

    +66.8

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    PChar GetFileContent(PChar FileName)
    {
    ...
    };
    
    static inline signed int GetFileSize(PChar FileName)
    {
      return(((signed int)(strlen(GetFileContent(FileName)))));
    };

    Всё гениальное - просто...

    Запостил: Говногость, 04 Сентября 2009

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

    • Возможно и повторение, но здесь всё лучше заоптимизированно inline-ом.
      А вот зачем же типизировать signed? Мы же теряем тогда целый бит!
      Ответить
      • static, signed - оптимизация?
        Ответить
        • и сигнед инт - мы не сможем узнать "длину" более чем двух гиговых файлов?(%
          Ответить
          • Видимо это защита, что-бы слишком большие файлы в память программер не пытался считывать, тк это всё-равно бесполезно... :-D
            Ответить
    • Я, может быть, не понимаю в чём состоит задача. Однако, различную служебную информацию можно узнавать посредством С-функций, которые к ОС обращаются. С++ хорошо С воспринимает и ничего страшного при использовании этих самых вызовов не произойдёт. Главное знать, что именно в различных полях структуры ваша ОС размещает. В любом случае это представляется более эффективным, чем "изобретение велосипеда". По-моему...
      Ответить
    • Считывать ВЕСЬ файл в ОЗУ только для того, чтобы определить его размер... Facepalm.jpg
      Ответить
      • Причём определить неправильно, если файл двоичный и содержит нулевые байты.
        Ответить
        • Может человек только для текстовых файлов функцию использовал?
          Ответить
    • Может это мультиплатформенная реализация?
      Ответить
      • Стандартное решение с fopen, fseek в конец файла, а потом fgetpos уже не канает?
        Ответить
    • А когда понадобится узнать дату создания файла, автор будет дежурить с лопатой за углом директории и ждать, пока файл кто-нибудь создаст?
      Ответить
      • Неа!!! Программа попросит посмотреть пользователя и ввести дату запрашиваемого файла.
        Ответить
    • А зачем сдесь преобразование типа к (signed int)?
      Ответить
      • Чтобы компилятор предупреждение о преобразовании типов не выдавал, вестимо. Ведь size_t обычно "больше" signed int.
        Ответить
        • Странно, что человек озабочен предупреждениями компилятора, а пишет такой код...
          Ответить
          • На то он и говнокодер. Узрите истинное лицо его.
            Ответить
          • Стало быть старается, но пока очень мало опыта.
            Ответить
    • Заметьте! В GetFileContent(...) наверяка выделяется память. Но она,то не где не освобождается, после измерения длины файла.
      Ответить
      • а вдруг PChar - это мощная обертка над си-стринг, которая много чего умеет и даже контролирует время жизни этого си-стринга? :)
        хотя врядли, конечно...
        Ответить
        • Ну тогда для неё чел выбрал очень подходящее название...
          Ответить
    • не, здесь забавное то, что функция strlen остановится ну нулевом байте :)
      Ответить
      • т.е. если у файла размер два гигабайта, но третий байт у него нулевой, то функция выдаст, что размер файла два байта

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

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