Область действия определяется как the area in which the object is active
. В C. Есть пять областей применения. Они следующие.
Область действия программы
Это объявления в верхних слоях. Они доступны до жизни программы. Все функции имеют эту область. В противном случае это называется глобальной областью действия.
Область файла
Он имеет такую область видимости, что к нему можно получить доступ с этой точки до конца файла.
void dummy(void) { }
// absence of static automatically gives program scope to `dummy()`
static void dummy(void) { }
// static keyword here gives function `dummy()` a file scope
Область действия функции
Только метки имеют эту область. В этой области они активны до конца функции.
void printFun()
{
print:
printf(“i is less than j”);
}
int main()
{
int i=1,j=2;
if(i < j)
goto print;
}
Этот код будет помечен как ошибка компилятором, сообщившим, что печать метки неизвестна, поскольку метки имеют только область действия функции. Если вам необходимо безоговорочно перейти между функциями, вы должны использовать функции setjmp
/ longjmp
.
Область применения блока
Объявления, которые активны до конца блока (где блок определяется как операторы в { }
). Все объявления внутри функции имеют только область видимости блока.
int fun(int a, int b)
{
int c;
{
int d;
}
// a, b, c, d all have block scope
}
Как я уже сказал, область действия функции применяется только к меткам. Так что не следует путать с областью применения блока. Аргументы функции обрабатываются так, как если бы они были объявлены в начале блока с другими переменными (помните, что тело функции также рассматривается как блок в { }
). Поэтому аргументы функции имеют область видимости блока (не область видимости функции).
Локальная область - это общее использование для обозначения области, которая является либо функцией, либо областью блока.
Область применения прототипа
Они имеют область видимости только внутри объявления прототипа. Эта область интересна тем, что имена переменных действительны только в объявлении прототипа и не конфликтуют с другими именами переменных. Он существует очень мало времени и менее полезен и поэтому остается незамеченным.
int add(int a, float b);
Здесь переменные a
и b
имеют область действия прототипа.
Выбор минимальной области действия
Когда имя должно быть разрешено, это имя ищется в минимальной области, а если оно недоступно, оно ищется на более высоких уровнях области. Таким образом, если переменная должна быть объявлена, вы должны выбрать минимально возможную область видимости. Если вы можете ограничить свои возможности, это повысит эффективность, удобочитаемость и удобство обслуживания вашей программы. Если вам нужна переменная, которая бесполезна вне блока, объявите ее внутри блока, а не во внешних. Точно так же, если вы хотите, чтобы переменная, значение которой было доступно только внутри функции, но которая должна сохранять значение между вызовами функции, выберите статическую переменную для глобальной.