Область файла и глобальная область: C & amp; Переполнение стека

Я студент, и меня смущают глобальные и файловые переменные области видимости в C и C ++.
Есть ли разница в обеих перспективах? Если да, пожалуйста, объясните подробно.

9

Решение

Переменная с областью видимости файла может быть доступна для любой функции или блока в пределах одного файла. Чтобы объявить переменную области файла, просто объявите переменную вне блока (так же, как глобальную переменную), но используйте ключевое слово static.

static int nValue; // file scoped variable
float fValue; // global variable

int main()
{
double dValue; // local variable
}

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

18

Другие решения

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

Global scope или же global namespace scope является самой внешней областью имен программы, в которой могут быть определены объекты, функции, типы и шаблоны. Имя имеет глобальную область пространства имен, если объявление идентификатора появляется вне всех блоков, пространств имен и классов.

Пример:

static int nValue; // file scoped variable
float fValue; // global variable

int main()
{
double dValue; // local variable
}

Прочитайте больше Вот.

0

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

В C ++ область действия файла также называется областью пространства имен.

0

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

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

other.cpp

float global_var = 1.0f;
static float static_var = 2.0f;

main.cpp

#include <cstdio>

extern float global_var;
//extern float static_var; // compilation error - undefined reference to 'static_var'

int main(int argc, char** argv)
{
printf("%f\n", global_var);
}

Отсюда разница очевидна.

0

Прочитайте это внимательно сейчас.

Вы используете эти #включают<‘…’. Ч> заявления в верхней части вашей программы / кода.
То, что вы на самом деле делаете, — это говорит компьютеру обратиться к функции написаны в тех *час* eader files. То есть эти функции имеют область видимости файла. Вы не пишете код printf scanf и такие функции, как эти, они находятся где-то в заголовочных файлах.

Переменные, объявленные вне функции, имеют «область видимости файла», то есть они видны внутри файла. Переменные, объявленные с областью действия файла, видны между их объявлением и концом модуля компиляции (файл .c), и они неявно имеют внешнюю связь и, таким образом, видны не только для файла .c или модуля компиляции, содержащего их объявления, но также и для всех остальных блок компиляции, связанный для формирования полной программы.

Глобальные переменные, как следует из названия, можно считать доступными глобально (везде)

-2
По вопросам рекламы [email protected]