Значение одиночных фигурных блоков кода в C - PullRequest
6 голосов
/ 03 сентября 2010

Я встретил немного кода, который содержит пару блоков кода, обозначенных фигурными скобками {}.Перед блоками кода нет строки, помечающей их как часть if операторов, определений функций или чего-либо еще.Просто блок кода, плавающий в середине функции.Есть ли в этом смысл?gcc кажется совершенно счастливым, проходя код;Я могу только представить, что это какой-то способ позволить оригинальному кодеру разделить блоки функциональности визуально ...

Ответы [ 5 ]

11 голосов
/ 03 сентября 2010

Создает область. Есть ли автоматические переменные, определенные внутри блоков? Если это так, то область действия этих переменных ограничена блоком. Это полезно для временных переменных, которые вы не хотите загрязнять остальной функцией, а также полезно при написании C89, где определения переменных должны находиться в начале блока.

Итак, вместо:

int main() {
    int a = 0;
    int b;
    int i;

    for (i = 1; i < 10; ++i) {
        a += i;
    }

    b = a * a;
    // do something with a and b
}

Вы можете иметь:

int main() {
    int a = 0;
    {
        int i;
        for (i = 1; i < 10; ++i) {
            a += i;
        }
    }

    {
        int b = a * a;
        // do something with a and b
    }
}

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

9 голосов
/ 03 сентября 2010

Для определения области видимости используются автономные фигурные скобки - все переменные, объявленные в блоке, не видны за его пределами.

2 голосов
/ 03 сентября 2010

Используется для создания области. Область, если она полезна для объявления переменных, которые могут использоваться только внутри этой области. Например, если переменная объявлена ​​перед фигурными скобками, ее можно использовать внутри фигурных скобок после них. Напротив, если переменная объявлена ​​внутри фигурных скобок, она может использоваться только внутри фигурных скобок. Надеюсь, это поможет.

2 голосов
/ 03 сентября 2010

Если блоки кода содержат объявления локальных переменных (ваше описание неясно, что внутри), они могут быть там, чтобы ограничить область действия этих переменных. * 1001 Т.е. *

int i = ...;
// i is visible here
{
  int j = ...;
  // both i and j are visible here
}
// j went out of scope, only i is visible here
0 голосов
/ 03 сентября 2010

Обычно это означает, что было написано, чтобы объявить переменную частично через более крупную функцию, но переменная нуждается только в очень ограниченной области видимости или даже может что-то скрыть. Он полностью легитиматичен - он просто вводит блок. Большая проблема всегда заключается в том, «какой правильный отступ для этого кода».

Он также может использоваться препроцессорами, которые преобразуют какой-либо другой язык в сгенерированный C. Преобразованный материал часто упакован в блок (и, возможно, директивы #line тоже).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...