저장소 클래스 지정자 외부 수준의 선언에 대 한
외부 변수 파일 범위 변수입니다.외부 함수에 정의 된 및 잠재적으로 많은 기능을 사용할 수 있습니다.함수 외부 수준 에서만 정의할 수 있습니다 및 따라서 중첩 될 수 없습니다.기본적으로 외부 변수와 이름이 같은 함수에 대 한 모든 참조를 "외부 링크"가 같은 개체를 참조 있습니다. (수 있습니다의 정적 이 무시 하는 키워드입니다.자세한 내용은이 섹션의 뒷부분에 나오는 정보를 참조 하십시오 정적입니다.)
변수 선언이 외부 수준에서 변수 ("선언을 정의"), 어느 정의입니다 또는 다른 위치 ("선언을 참조") 변수에 대 한 참조를 정의 합니다.
또한 (암시적 또는 명시적) 변수를 초기화 하는 외부 변수 선언 정의 선언 변수입니다.외부 수준에서 정의 여러 가지 형태로 나타날 수 있습니다.
로 선언한 변수는 정적 저장소 클래스 지정자입니다.명시적으로 초기화할 수 있는 정적 변수는 상수 식의 설명에 따라 초기화.이니셜라이저를 지정 하지 않으면 변수가 기본적으로 초기화 됩니다.예를 들어, 이러한 두 문은 모두 고려 정의 변수입니다 k.
static int k = 16; static int k;
외부 수준에서 명시적으로 초기화 하는 변수입니다.예를 들어, int j = 3; 변수는 정의 된 j.
외부 수준에서 변수 선언에 (즉, 모든 함수 외부), 사용할 수 있습니다의 정적 또는 extern 저장소 클래스 지정자를 또는 저장소 클래스 지정자를 완전히 생략.사용할 수 없습니다의 자동 및 등록저장소 클래스 지정자 터미널 외부 수준입니다.
외부 수준에서 변수가 정의 되 면, 나머지 부분 번역 단위 표시입니다.변수 선언 같은 소스 파일에 이전에 표시 되지 않습니다.선언을 참조 하 여 아래와 같이 보이게 하지 않으면 또한 그 다른 프로그램의 소스 파일에 표시 되었습니다.
관한 규칙 정적 포함 합니다.
변수를 선언 하지 않고 모든 블록 외부에서 정적 키워드 항상 프로그램 전체에서 그 값을 유지 합니다.특정 번역 단위에의 액세스를 제한 하려면 사용 해야 해당 정적 키워드입니다.이 "내부 링크" 제공 프로그램 전체를 글로벌 하 게 하려면 명시적 저장소 클래스를 생략 하거나 키워드를 사용 extern (규칙 다음 목록에서 참조).이 "외부 링크" 제공 내부 및 외부 링크가 나와 포함.
프로그램 수준 외부만 한 번에 변수를 정의할 수 있습니다.같은 이름 가진 다른 변수를 정의할 수 있습니다과 정적 저장소 클래스 지정자를 다른 번역 단위에서.이후 각 정적 정의 자체 번역 단위에만 표시 됩니다 충돌이 발생 하지 않습니다.이 유용한 기능을 단일 변환 단위로의 사이에서 공유 했는데 다른 번역 단위를 표시 해야 하는 식별자 이름을 숨길 수가 있습니다.
해당 정적 저장소 클래스 지정자를이 함수에도 적용 될 수 있습니다.함수를 선언 하는 경우 정적, 그 이름을 선언 된 파일 외부에서 볼 수 없습니다.
규칙을 사용 하 여 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
}
이 예제에서는 두 개의 소스 파일 총 3 개의 외부 선언에 포함 된 i.하나의 선언 "정의 선언"입니다. 해당 선언
int i = 3;
전역 변수 정의 i , 3 초기 값으로 초기화 합니다."참조" 선언 i 사용 첫 번째 소스 파일의 위쪽에 있는 extern 파일에서 전역 변수를 정의 선언 하기 전에 볼 수 있게 합니다.참조의 선언 i 의 두 번째 소스 파일 또한 변수가 해당 소스 파일에서 보이도록 합니다.정의 인스턴스 변수의 번역 단위에서 제공 되지 않은 경우 컴파일러는 가정에
extern int x;
선언 및 정의 참조 하는 참조
int x = 0;
프로그램의 다른 번역 단위에서 나타납니다.
세 함수 모두 main, next, 및 other, 같은 작업을 수행할: 이러한 증가 i 인쇄.4, 5 및 6 값이 인쇄 됩니다.
경우 변수 i 없습니다 될 때 초기화가 0으로 자동 설정 된 것입니다.이 경우에 1, 2 및 3 값 인쇄 될 합니다.참조 하십시오 초기화 변수 초기화에 대 한 정보입니다.