2014-10-13 4 views
1

Я всегда считаю, что очень удобно использовать C в качестве блоков блокировки. Основная причина заключается в том, что я могу лучше использовать синтаксис, сложенный в моей среде IDE, без дополнительной сложности с моим кодом (например, добавлением дополнительных функций).Закрытие/функциональные блоки в C

// Block 1 
{ 
    int i; 
    i = some_work(i); 
    j = i; 
} 

// Block 2 
{ 
    ... 
} 

Я не знаю, если это правильное решение в С. Есть ли какие-либо стандарты программирования, которые упоминают закрывающие блоки в C?

ответ

3

Большинство стандартов программирования выступают за разделение длинных функций на более короткие и использование пустых строк для разделения функции на меньшие единицы.

Две основные причины этого - читаемость и проверяемость.

Если вы разделите длинную функцию на более мелкие, каждая меньшая функция может быть проверена отдельно.

Что вы делаете, лучше, чем просто иметь большую функцию, но вы упускаете часть проверяемости.

В зависимости от того, как выглядит ваш код, вы также можете упускать возможность чтения. Помните, что функция имеет имя, которое описывает это. У блоков нет имен, поэтому для его описания вам понадобится комментарий.

При правильном использовании блоки могут использоваться для повышения удобочитаемости. Однако то же самое верно для простой пустой строки. Преимущество блока над пустой строкой заключается в том, что он ограничивает область локальных переменных, что повышает читаемость.

Итак, для каждого создаваемого вами блока вы должны учитывать, соответствует ли он пустой строке или вызову функции. В последнем случае преобразуйте блок в отдельную функцию.

3

Это не closures, они просто блокировки.

Вы не можете использовать их, как вы можете, с закрытием на языках, поддерживающих закрытие. Например, вы не можете сохранить ссылку на такой блок и выполнить ее позже, например.

Они менее полезны в C99, поскольку теперь вы можете объявлять новые переменные где угодно.

Смежные вопросы