Описатели Хранени-Класса для объявлений Внешний-Уровня
Внешние переменные, переменные в области файла.Они определены вне любой функции, и они доступны потенциально множество функций.Функции можно указать только на внешнем уровне и поэтому не могут быть вложенными.По умолчанию все ссылки на внешние переменные и функции того же имени ссылки на один и тот же объект, что означает, что они имеют связь "внешним". (Можно использовать Статический ключевое слово, позволяющее переопределить это.Сведения см. ниже в данном разделе дополнительные сведения о on Статический.)
Объявления внешних переменных на уровне или определения переменных ("указание объявления") или ссылки на переменные, указанным в другом месте ("ссылающийся объявления").
Внешнее объявление переменной, которое также инициализирует переменную (явно или неявно), задающих объявление переменной.Определение внешнего уровне может принимать различные формы:
Переменная, объявленные с Статический описатель хранени-класса.Можно явно инициализации Статический переменная с константным, как описано в разделе Инициализация.Если инициализатор, то она инициализирована до 0 по умолчанию.Например, эти 2 выписки оба рассматриваемых определения переменной k.
static int k = 16; static int k;
Переменная, которая явно инициализировать во внешнем уровне.Например, int j = 3; определение переменной j.
В объявлении переменных во внешнем уровне (то есть за пределами всех функций) можно использовать Статический OR extern описатель хранени-класса или не содержит описатель хранени-класса полностью.Нельзя использовать Авто и регистр storage-class-specifier стержни на внешнем уровне.
После того как переменная определяется во внешнем уровне, она отображается на протяжении всего единицы измерения.Переменная не отображается до объявления в том же файле источника.Кроме того, он не отображается в других исходных файлах программы, если ссылающийся на объявление не будет сделать ее видимой, как описано ниже.
Правила, относящиеся к Статический включите:
Переменные, объявленные всех блоков без ожидания Статический ключевое слово всегда сохраняет их значения на протяжении программы.Чтобы ограничить их доступа к определенной единицы измерения перевода необходимо использовать Статический ключевое слово.Это дает им "внутренний переключатель". Чтобы сделать их глобальными для всей программе, опустите точный класс хранения или используйте ключевое слово extern (см. раздел правила в следующем списке).Это дает им "внешний переключатель". Внутренний и внешний переключатель также рассматривается in связь.
Можно задать переменную во внешнем уровне только один раз в пределах программы.Можно указать другой переменной с тем же именем и Статический описатель хранени-класса в другую единицы измерения.С каждой Статический определение видимым только в своей единица преобразования, происходит конфликт.Это обеспечивает удобный способ скрывать имена идентификаторов, которые должны совместно использоваться функций одной единицы измерения перевода, но не видны другим единицам перевода.
Статический описатель хранени-класса может применяться к функциям.При объявлении функции Статический, незримое вне его имя файла, в котором она объявлена.
Правила использования extern таковы:
extern описатель хранени-класса объявляет ссылку на переменную, определенную в другом месте.Можно использовать extern объявление, чтобы сделать это определение в другом файле источника, видимую переменную или сделать видимыми до его определения в том же файле источника.Как только объявляли ссылку на переменную во внешнем уровне, переменная отображается на протяжении остатка единицы измерения перевода, в которой объявлен как ссылка.
Для extern ссылка, которые должны быть допустимыми, переменная она ссылается на быть указан один раз и только один раз во внешнем уровне.Это определение (без extern класс хранения), может быть в любом единицах перевода, составляющих программу.
Пример
В следующем примере иллюстрируется внешние объявления:
/******************************************************************
SOURCE FILE ONE
*******************************************************************/
#include <stdio.h>
extern int i; // Reference to i, defined below
void next( void ); // Function prototype
int main()
{
i++;
printf_s( "%d\n", i ); // i equals 4
next();
}
int i = 3; // Definition of i
void next( void )
{
i++;
printf_s( "%d\n", i ); // i equals 5
other();
}
/******************************************************************
SOURCE FILE TWO
*******************************************************************/
#include <stdio.h>
extern int i; // Reference to i in
// first source file
void other( void )
{
i++;
printf_s( "%d\n", i ); // i equals 6
}
2 Исходного файла в этом примере содержится всего 3 внешних объявлений i.Только одно объявление "определение" объявление. Это объявление,
int i = 3;
указывает глобальная переменная i и инициализирует его с исходным значением 3."Ссылки" объявление i в верхней части первый файл источника с помощью extern делает его видимым на глобальную переменную при определении баннеров в файле.Объявление ссылается на i во втором файле источника также делает переменные видимым в этом файле источника.Если при определении экземпляр переменной не предоставлен в перевода, то компилятор предполагает
extern int x;
ссылка на объявление и указав ссылку
int x = 0;
отображается в другую единицу измерения перевода программы.
Все функции, 3 main" nextи otherвыполните ту же задачу: они увеличивают i и распечатать его.Выводятся значения 4, 5 и 6.
Если переменная i не инициализированы, оно автоматически установлено в значение 0.В этом случае были бы выводятся значения 1, 2 и 3.См. Инициализация дополнительные сведения об инициализации переменной.