extern 저장소 클래스 지정자

로 선언 된 변수는 extern 저장소 클래스 지정자를 외부 수준 프로그램의 소스 파일에 정의 된 같은 이름의 변수에 대 한 참조입니다.내부 extern 선언 블록 내에서 외부 수준 변수 정의 보이게 하는 데 사용 됩니다.그렇지 않으면 외부 수준에서 선언 된 경우를 제외 하 고, 변수 선언는 extern 키워드는 블록에만 표시 됩니다에 선언 되어 있습니다.

예제

이 예제에서는 내부 및 외부 수준의 선언을 보여 줍니다.

// extern_StorageClassSpecified.c
#include <stdio.h>

void other( void );

int main()
{
    // Reference to i, defined below: 
    extern int i;

    // Initial value is zero; a is visible only within main: 
    static int a;

    // b is stored in a register, if possible: 
    register int b = 0;

    // Default storage class is auto: 
    int c = 0;

    // Values printed are 1, 0, 0, 0: 
    printf_s( "%d\n%d\n%d\n%d\n", i, a, b, c );
    other();
    return;
}

int i = 1;

void other( void )
{
    // Address of global i assigned to pointer variable:
    static int *external_i = &i;

    // i is redefined; global i no longer visible: 
    int i = 16;

    // This a is visible only within the other function: 
    static int a = 2;

    a += 2;
    // Values printed are 16, 4, and 1:
    printf_s( "%d\n%d\n%d\n", i, a, *external_i );
}

이 예제에서 변수 i 외부 수준 초기 값 1로 정의 됩니다.extern 선언에는 main 함수 외부 수준에 대 한 참조를 선언 하는 데 사용 됩니다 i.해당 정적 변수 a 이니셜라이저를 지정 하지 않으므로 기본적으로 0으로 초기화 됩니다.호출을 printf 1, 0, 0, 0의 값을 인쇄 합니다.

에 other 함수, 전역 변수의 주소를 i 초기화 하는 데 사용 되는 정적 포인터 변수 external_i.전역 변수가 있기 때문에이 작동 정적 수명, 프로그램 실행 시 해당 주소를 변경 하지 않는 것을 의미 합니다.다음, 변수 i 지역 변수 초기 값이 16으로 다시 정의 됩니다.이 재정의 수준 외부의 값에 영향을 미치는 i, 이름이 지역 변수를 사용 하 여 표시 됩니다.전역 값 i 이제는 직접 액세스할 수 없습니다이 블록 포인터를 통해 내 external_i.주소를 할당 하는 있는 자동 변수 i 이 블록 입력 될 때마다 다를 수 있습니다 때문에 대 한 포인터를 작동 하지 않습니다.변수 a 로 선언 되는 정적 변수 및 2 초기화.이 a 충돌 하지는 a 에서 main, 이후 정적 내부 수준 변수는 해당 블록 내 에서만 표시 되는 선언 된.

변수 a 4 결과로 부여 2로 증가 됩니다.경우는 other 함수가 것 같은 프로그램에서 초기 값을 다시 호출 a 4 될 수 있습니다.내부 정적 변수 값 유지 프로그램을 끝내 고 다음 블록을 다시 한 번 입력 하는 경우에 선언 된.

참고 항목

개념

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