Разве локальная область иногда не ссылается на область функции?
Да. В большинстве языков, производных от C, переменные действительны в той области, в которой они объявлены. Если вы объявляете переменную внутри функции, но не внутри какого-либо другого блока кода, то эта переменная обычно называется «локальной» или «автоматической» переменной. Вы можете обратиться к нему в любом месте функции. С другой стороны, если вы объявите свою переменную в другом блоке кода, скажем, в теле условного оператора, тогда переменная будет действительной только внутри этого блока. Несколько других ответов здесь дают хорошие примеры.
и что это значит, что только метки имеют область действия функции?
Контекст был бы полезен, но это означает, что вы не можете перейти от одной функции к метке в другой функции.
void foo(int a) {
if (a == 0) goto here; // okay -- 'here' is inside this function
printf("a is not zero\n");
goto there; // not okay -- 'there' is not inside this function
here:
return;
}
void bar(int b) {
if (b == 0) goto there; // okay -- 'there' is in this function
printf("b is not zero\n");
there:
return;
}
Не всколыхнуть гнездо шершня, но объем ярлыков, вероятно, не будет появляться слишком часто. Метки в основном полезны с оператором goto
, который необходим очень редко, если вообще когда-либо, и даже если вы решили использовать goto
, вы, вероятно, даже не подумаете о попытке перейти к другой функции.