c/c++에서 static으로 선언한 global 변수랑 그렇지 않은것이랑 차이점이 궁금합니다.

vudghkzm의 이미지

c/c++ 에서 아래의 코드에서 1번으로 선언하는 경우랑 2번으로 선언하는 경우랑 어떤 차이점이 있는지 궁금합니다.

static int i = 0;    /* 1번 */
int j = 0;           /* 2번 */
 
int main() {
    printf("%d\n", i);
    printf("%d\n", j);
 
    return 0;
}

둘다 전역변수이지만, static이 붙느냐 그렇지 않느냐의 차이가 있는데요.
그 차이점이 궁금합니다.

vudghkzm의 이미지

올바로 사용한거 같은데, code 태그가 안 먹네요..

뿌직의 이미지

태그는 와 로 해야 되더군요.

--------------------------
`0-
-0`

--------------------------
`0-
-0`

익명 사용자의 이미지

i는 다른파일에서 접근이 안되요.
j는 가능

kewlbear의 이미지

static을 위와 같이 쓰는 이유는 보통 다른 소스 파일에서 같은 이름의 변수를 정의할 경우 링크 에러가 발생하지 않도록 하는 것입니다. C++이라면 아래와 같이 하시기를 권해드립니다.

namespace {
int i = 0;
}