저장소 클래스 지정자 외부 수준의 선언에 대 한

외부 변수 파일 범위 변수입니다.외부 함수에 정의 된 및 잠재적으로 많은 기능을 사용할 수 있습니다.함수 외부 수준 에서만 정의할 수 있습니다 및 따라서 중첩 될 수 없습니다.기본적으로 외부 변수와 이름이 같은 함수에 대 한 모든 참조를 "외부 링크"가 같은 개체를 참조 있습니다. (수 있습니다의 정적 이 무시 하는 키워드입니다.자세한 내용은이 섹션의 뒷부분에 나오는 정보를 참조 하십시오 정적입니다.)

변수 선언이 외부 수준에서 변수 ("선언을 정의"), 어느 정의입니다 또는 다른 위치 ("선언을 참조") 변수에 대 한 참조를 정의 합니다.

또한 (암시적 또는 명시적) 변수를 초기화 하는 외부 변수 선언 정의 선언 변수입니다.외부 수준에서 정의 여러 가지 형태로 나타날 수 있습니다.

  • 로 선언한 변수는 정적 저장소 클래스 지정자입니다.명시적으로 초기화할 수 있는 정적 변수는 상수 식의 설명에 따라 초기화.이니셜라이저를 지정 하지 않으면 변수가 기본적으로 초기화 됩니다.예를 들어, 이러한 두 문은 모두 고려 정의 변수입니다 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 값 인쇄 될 합니다.참조 하십시오 초기화 변수 초기화에 대 한 정보입니다.

참고 항목

참조

저장소 클래스 c