> -- jackbauer писал(а):
> А теперь с точки зрения человека, который этот код видит впервые, в каком из вариантов более ясно прослеживается алгоритм работы функции?Пока народ подтягивается и формирует своё мнение, добавлю следующее замечание. На мой взгляд, наибольшей ясности можно добиться грамотной декомпозицией. Например, функция read_file должна бы выглядеть примерно так:## Код:
```
bool read_file(const char * file_name, char ** content, size_t * content_size)
{
    bool success = false;
    FILE * fh = fopen(file_name, "r");
    if (fh)
    {
        success = read_file_hnd (&fh, &content, &content_size); // за правильность передачи параметров не ручаюсь
        fclose(fh);
    }
    return success;
}
```
Провести такую декомпозицию невозможно до тех пор, пока в коде пристутствуют break/goto между уровнями вложенности блоков. Когда прыжки между уровнями устранены, любой вложенный уровень можно оформить в виде отдельной функции и дать ей осмысленное имя. При визуальной обозримости кода выделение в отдельную функцию может быть не обязательно, но читающий всё равноможет мысленно сформулироватьпредназначение каждого блока, в том числе в виде пред- и постусловий. Именно таковая возможность, на мой взгляд, является главным преимуществом структурной записи алгоритма.