ProgramingTip

정적 vs 글로벌

bestdevel 2020. 11. 18. 09:32
반응형

정적 vs 글로벌


나는 다음과 같은 C 파일이있는 경우의 차이 무엇 ij?

#include <stdio.h>
#include <stdlib.h>

static int i;
int j;

int main ()
{
    //Some implementation
}

i내부 연결이 있으므로 i다른 소스 파일 (엄격히 번역 단위)에서를 사용 하여 생성 된 이름 참조 할 수 없습니다 .

j외부 연결이 있으므로 다른 번역 단위에서 j선언하는 경우이 개체를 참조하는 데 사용할 수 있습니다 extern.


i모듈 외부에서는 설명합니다. j전 세계적으로 액세스 할 수 있습니다.

즉, 링크 된 다른 모듈은

extern int j;

에서 값을 읽고 쓸 수 있습니다 j. 동일한 다른 모듈이에 액세스 할 수 없지만 i첫 번째 모듈에는 표시되지 않는 전역 인스턴스라도 자체 인스턴스를 선언 할 수 있습니다.


차이점은 i내부 연결 j이 외부 연결이 것입니다. j, 된 다른 파일-link에서 액세스 할 수 있지만 i선언 된 파일에서만 사용할 수 있습니다.


i정적 연결 을 갖습니다 . 즉, 현재 파일에서만 액세스 할 수 있습니다.

j로 정의되어야합니다 extern.

extern int j;

다른 외부 헤더 파일 ( .h)에있는 경우에있는 경우 파일간에 액세스 할 수 있습니다.


다른 소스의 일부로 파일을 포함 했음에도 불구하고 정적 변수 / 함수의 범위는 파일 복제가 있습니다.

전역 변수의 범위는 포함 된 파일 전체입니다. 다른 소스 파일에 변수를 extern선택하기 전에 사용 합니다. 이 경우 변수에 대해 메모리가 다시 할당되지 않습니다.

extern정의하지 않고 C 변수를 선언하는 데 사용됩니다. extern키워드는 C 변수 및 C 함수의 가시성을 확장합니다. 함수는 기본적으로 프로그램을 통해 볼 수 있으므로 함수 extern선언 / 정의에 사용할 수 없습니다. 그 사용은됩니다.

참고 URL : https://stackoverflow.com/questions/2271902/static-vs-global

반응형