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

    −5

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    /* Где-то определена gfSets, которая может изменяться другим потоком */
    
    void sort_items(ITEMSTRUCT **pItemArray, size_t nItems)
    {
        ASSERT(pGlobalItemCache);
    
        if(pItemArray == NULL) return;
    
        gfSets |= FSORTING;
    
        for(size_t d = (nItems >> 1); d > 0; d >>=1) {
            for(size_t i = d; i < nItems; ++i) {
                ITEMSTRUCT *pTemp = pItemArray[i];
                size_t j = i;
    
                while(j >= d) {
                    if(gfSets & FBREAKALL) goto Stop;
                    if(compare_by_range(pTemp->Range, pItemArray[j - d]->Range) < 0) pItemArray[j] = pItemArray[j - d];
                    else break;
                    j -= d;
                }
    
                pItemArray[j] = pTemp;
            }
        }
    
    Stop:
        gfSets &= ~FSORTING;
    }

    Есть мнение, что использовать goto является дурным тоном. Отчасти да, это так, но это ведь как в той поговорке: "Доверь, говорят, дураку стеклянный хуй, так он и хуй разобьет, и жопу порежет, да еще и губы поцарапает". Поэтому, если использовать goto в меру, а также ради улучшения читаемости кода или крайней необходимости, то в этом нет ничего позорного. Например, в примере, что выше, без goto инструкции gfSets &~ FSORTING и return пришлось бы писать два раза. Напрашивается вопрос: Нахуя?! Ведь есть goto.
    Лично я всегда использовал, использую, и буду использовать goto там, где считаю нужным, и мне похую на всякие там "Clean code", о которых говорилось в комментах поста, что ниже.

    З.Ы. Старайтесь избегать "оптимизаторов", подобных ASD 77

    Запостил: Graviton, 08 Апреля 2017

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

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