글로벌 변수 앞에 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; }
static
renders는 일반적으로 이 파일에 대한 로컬 변수입니다.예를 들어 이 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
'programing' 카테고리의 다른 글
VueJ의 동적 구성 요소에 대한 사용자 지정 이벤트 프로그래밍 바인딩s (0) | 2022.08.18 |
---|---|
Vue: Vuex getter에서 Per-Route Guard를 사용하는 방법 (0) | 2022.08.18 |
Java &= 운영자는 & 또는 &&를 적용합니까? (0) | 2022.08.17 |
vue-router를 typescript와 함께 사용하려고 할 때 "No overload matches this call"이 발생한다. (0) | 2022.08.17 |
Vuejs 구성 요소의 클래스 이름을 가진 요소까지 아래로 스크롤합니다. (0) | 2022.08.17 |