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

    +137.6

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    for( unsigned int i = 0; i < strlen(str); i++)
    {
        if ( str[i] == '-')
        {
            str[i] = '\0';
            break;
        }
    }

    'strlen' в условии цикла - это вычисление инварианта в теле цикла.
    Вообще этот цикл реально можно заменить одним вызовом 'strchr'

    Запостил: benderlog, 18 Марта 2010

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

    • Компилятор всеравно оптимизирует, и не факт что вариант со strchr будет быстрее.
      Ответить
      • Конечно, компилятор всё всё вусмерть оптимизирует, а бесконечное кол-во обезьян напишут всего Шекспира.
        Но это не повод говнякать направо и налево.
        Ответить
      • ничего он не оптимизирует. Строка меняется в цикле...
        Ответить
    • Все зависит от компилятора, то что strchr быстрее работает я более чем уверен.
      Ответить
      • ага, кто знает, может strlen постоянно вызываться будет... нельзя так наверняка, если пишется кроссплатформ. софт.
        Ответить
        • А это уже проблема платформы, если все свое писать, так надо писать на асме, эффективно. Но кого волнует, что разработка затянется на десятилетия.
          Ответить
    • > for( unsigned int i = 0; ...

      Оно еще и скомпилится только c99-компилятором.
      Ответить
      • Шо? Имеете ввиду, что сегодня нужно обратно совместимо с с90 писать?
        Ответить
    • Блин. Хоть не в Си++ положили!
      Ответить

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