programing

스태틱과 글로벌

prostudy 2022. 8. 31. 21:43
반응형

스태틱과 글로벌

만약 내가 아래와 같은 C파일을 가지고 있다면, 어떤 차이가 있을까요?i그리고.j?

#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단, 첫 번째 모듈에서는 표시되지 않는 독자적인 인스턴스(글로벌 인스턴스라도)를 선언할 수 있습니다.

파일을 다른 소스 파일의 일부로 포함하더라도 정적 변수/함수의 범위는 동일한 파일 내에 있습니다.

글로벌 변수의 범위는 변수가 포함된 파일 전체에 있습니다.변수를 다른 소스 파일에 포함하려면extern변수 선언 전.이 경우 변수에 다시 메모리가 할당되지 않습니다.

externC 변수를 정의하지 않고 선언하기 위해 사용됩니다. extern키워드를 지정하면 C 변수 및 C 함수의 가시성이 확장됩니다.기능은 기본적으로 프로그램 전체에 표시되므로,extern는 함수 선언/정의에 필요하지 않습니다.그 용도는 장황하다.

다른 점은 말이다.i내부 링크가 있습니다.j에는 외부 링크가 있습니다.즉, 접속할 수 있습니다.j다른 파일로부터 액세스 할 수 있습니다.i는 선언된 파일에서만 사용할 수 있습니다.

i에는 정적 링크가 있습니다.즉, 변수는 현재 파일에서만 액세스할 수 있습니다.

j로 정의되어야 한다extern,그것은

extern int j;

다른 헤더 파일(.h외부 링크가 있어 여러 파일에 액세스 할 수 있습니다.

언급URL : https://stackoverflow.com/questions/2271902/static-vs-global

반응형