programing

글로벌 변수 앞에 static 키워드를 사용하는 경우

bestcode 2022. 8. 18. 23:31
반응형

글로벌 변수 앞에 static 키워드를 사용하는 경우

헤더 파일에 정의된 글로벌 변수 또는 상수 앞에 static 키워드를 사용해야 하는 시기를 설명할 수 있습니까?

예를 들어 다음과 같은 행이 있는 헤더파일이 있다고 합시다.

const float kGameSpriteWidth = 12.0f;

이 경우static앞에const안 그래요?를 사용하기 위한 베스트 프랙티스는 무엇입니까?static?

헤더 파일에 글로벌 변수를 정의하지 마십시오..c 소스 파일에서 정의해야 합니다.

  • 글로벌 변수가 하나의 .c 파일 내에서만 표시되는 경우 정적임을 선언해야 합니다.

  • 글로벌 변수를 여러 .c 파일에 걸쳐 사용하는 경우 정적임을 선언하지 마십시오.대신 필요한 모든 .c 파일에 포함된 헤더 파일에 외부로 선언해야 합니다.

예:

  • example.h

    extern int global_foo;
    
  • #include "example.h"
    
    int global_foo = 0;
    static int local_foo = 0;
    
    int foo_function()
    {
       /* sees: global_foo and local_foo
          cannot see: local_bar  */
       return 0;
    }
    
  • #include "example.h"
    
    static int local_bar = 0;
    static int local_foo = 0;
    
    int bar_function()
    {
        /* sees: global_foo, local_bar */
        /* sees also local_foo, but it's not the same local_foo as in foo.c
           it's another variable which happen to have the same name.
           this function cannot access local_foo defined in foo.c
        */
        return 0;
    }
    

staticrenders는 일반적으로 이 파일에 대한 로컬 변수입니다.를 들어 이 Wikipedia 엔트리를 참조하십시오.

네, 정적 사용

항상 스태틱 사용.c다른 오브젝트를 참조할 필요가 없는 한 파일 생성.c모듈.

에서는 스태틱을 사용하지 않는다..h파일이 포함될 때마다 다른 개체를 생성하기 때문입니다.

헤더 파일의 경험치:

  • 변수를 로 선언하다extern int foo;번역 유닛 간에 공유되는 수정 가능한 값을 얻기 위해 대응하는 초기화를 단일 소스 파일에 저장합니다.
  • 사용하다static const int foo = 42;(상수를) 삽입할 수 있다

C에서 static 키워드는 함수 또는 변수의 가시성을 변환 단위로 제한하기 위해 사용됩니다.변환 유닛은 오브젝트 파일이 생성되는 C 컴파일러의 최종 입력입니다.

체크해주세요: Linking | Translation Unit

static글로벌 변수가 정의되어 있는 컴파일모듈 외부에서 이 변수에 액세스할 수 없음을 의미합니다.

예를 들어, 다른 모듈의 변수에 액세스하고 싶다고 가정합니다.

foo.c

int var; // a global variable that can be accessed from another module
// static int var; means that var is local to the module only.
...

bar.c

extern int var; // use the variable in foo.c
...

이제 당신이 선언한다면var정적이 되기 위해서는 모듈 이외에서는 액세스 할 수 없습니다.foo.c는 로 컴파일 됩니다.

모듈은 현재 소스 파일과 포함된 모든 파일입니다.즉, 이러한 파일을 개별적으로 컴파일한 후 링크해야 합니다.

익명 네임스페이스의 C++에 대한 올바른 메커니즘.파일에 로컬인 것을 원하는 경우 정적 수식자가 아닌 익명 네임스페이스를 사용해야 합니다.

글로벌 스태틱 변수는 자동과 달리 컴파일 시 초기화됩니다.

언급URL : https://stackoverflow.com/questions/1856599/when-to-use-static-keyword-before-global-variables

반응형