Почему включают блоки кода C в фигурных скобках?

Java передает ссылки на объекты значением.

61
задан niton 16 April 2015 в 00:28
поделиться

9 ответов

Требуется устаревший код {} для того, чтобы вообще делать объявления

В C89 нельзя было просто выполнять int i; где угодно; объявления действительны только в начале блоков.

Итак:

a = 1;
int i; /* error */
i = 2;

... недействительно, но

a = 1
if (e) {
  int i;

... было нормально, как и простой блок.

Полученный стиль продолжался даже после того, как объявления стали действительными (C99) block-item (s), частично по инерции, частично для обратной переносимости, а также потому, что имеет смысл установить область для новых объявлений.

91
ответ дан 24 November 2019 в 17:06
поделиться

Для определения переменных. Например, переменная tmp_argv будет действительна только между фигурными скобками.

38
ответ дан 24 November 2019 в 17:06
поделиться

Блок - это область, которая определяет время жизни переменных, а также их видимость для компилятора. Таким образом, переменные, которые создаются в блоке, исчезают, когда элемент управления выходит из блока.

Это может быть очень удобно, когда эти переменные являются экземплярами классов с конструкторами и деструкторами.

Однако в вашем примере нет большого преимущества.

7
ответ дан 24 November 2019 в 17:06
поделиться

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

6
ответ дан 24 November 2019 в 17:06
поделиться

Другой случай использования для этого, который я недавно обнаружил, - это когда у вас есть семантика открытия / закрытия и вы хотите четко обозначить «внутренний» код:

f = fopen('file');
{
    // do stuff
}
fclose(f);

Это хорошо работает, чтобы напомнить вам закрыть / освободить объекты, а a делает код несколько чище.

8
ответ дан 24 November 2019 в 17:06
поделиться

Переменные, которые вы объявляете внутри блока, являются локальными для этого блока. Таким образом, вы сможете переопределить tmp_argv в другом месте вашего кода (ниже), не вступая в конфликт с этим фрагментом кода.

5
ответ дан 24 November 2019 в 17:06
поделиться

Это все? Возможно, программист использует tmp_argv где-то еще в коде. Я не могу придумать никакой другой причины, поскольку tmp_argv между { и } отделен от любых фигур, находящихся вне фигурных скобок.

1
ответ дан 24 November 2019 в 17:06
поделиться

Иногда я использую блоки в таких случаях: - Для локализации переменных - Или чтобы было легче читать ...

1
ответ дан 24 November 2019 в 17:06
поделиться

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

-3
ответ дан 24 November 2019 в 17:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: