본문 바로가기
프로그래머의 길/C & C++

extern, static 이란?

by 제이콥케이 2007. 3. 9.
반응형

------- 1.c

#include <stdio.h>
int a;  // a를 선언
void sam(); // 함수 선언
void main()
{
 a = 10; 
 printf("%d", a);

 sam();
 printf("%d", a); // 10이 출력? 20이 출력?
}
 

-------- 2.c

int a;
void sam()
{
   a = 20; 
}


위와 같은 분할 컴파일의 경우 변수 a가 중복되기 때문에 에러가 발생한다.
그렇다고 2.c 에 외부 변수가 없다면 또한 에러가 발생한다.

두 파일에서 같은 변수로 인식을 하고 싶다면 extern int a; 라고 선언을 해주면 된다.
하지만 비주얼 C 에서는 없어도 알아서 extern을 붙여서 프로그램이 이상없이 돌아간다.

그렇지만 붙여주는 습관을 들여라~

extern int a;
void sam()
{
   a = 20; 
}



- static 변수

1. static storage duration을 갖는다.
2. scope의 영향을 받는다.
           - 전역 변수 : file scope의 영향을 받으며 internal linkage라고 한다.
           - 지역 변수 : block scope의 영향을 받는다.
           - 클래스 멤버 변수 : 클래스 이름공간의 영향을 받는 전역 객체이다.

static 함수

1. 일반 함수 : internal linkage를 갖는다. , 외부 파일에서 해당 함수를 호출하지 못한다.
2. 클래스 멤버 함수 : this 포인터를 갖지 않는다. 따라서 객체의 멤버 변수나 멤버 함수를 직접 참조/호출할 수 없다. , 같은 클래스의 static 멤버 변수나 static 멤버 함수는 직접 참조/호출이 가능하다.

-포인트-

C에서 static의 의미는 C++에서 private의 역할을 한다.
즉, 다른 파일에서 접근이 불가하며, 정적으로 공간을 잡는다.



반응형