Область файла и глобальная область: C & C++

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

5 ответов

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

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

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

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

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

Возьмите 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);
}

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

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

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

Пример:

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

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

Узнайте больше здесь.

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

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

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

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

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

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

Другие вопросы по тегам