노무현 대통령 배너


2006. 7. 20. 14:13

[본문스크랩] extern 과 static 의미?

extern 과 static 이 함수에 사용될때와 변수에 사용될때에 따라 구분해보자.

하나의 프로그램을 개발할때 하나의 파일만으로 개발하는것이 아니라, 여러사람이 여러개의

파일을 이용해서 개발할것이다. 즉, 여러파일로 개발을 하고 나중에 통합할때 이용될수 있겠다.

=== 함수일때

1. 함수에 사용될때 extern을 사용하면 다른 함수에서 해당 함수를 호출할수 있다. 이것은 디폴트 방식이기도 하다(아무것도 써주지않을때 기본적으로 extern 이다.) .함수를 작성할때 extern 을 써주지 않아도, 다른 파일에서 해당 함수를 호출

할수 있는방식이다. 즉, extern지정은 함수가 정의된 화일외에 다른 화일에서 함수의 호출을 허용한다.

2. static 지정을 하면 함수가 정의된 파일에서만 이 함수를호출할수 있다. 즉 다른파일에서는

이 함수를 호출할수 없는것이다. 즉 여러파일에 같은 함수 이름이 존재한다고 해도 에러를 발생시키지 않는다는것이다.

=== 변수일때

3. 외부변수 (extern)는 함수밖에서 선언되어 선언된 시점이후 모든 함수에서 사용가능한 변수이다.

외부변수의 선언은 각 함수간에 자료를 공유하는 경우에 사용되는 변수이다.

4. 외부변수는 함수의 밖에서 선언되어 선언된 시점이후 화일의 끝가지 모든 함수에서 사용가능하고 프로그램의 종료시 까지 메모리에 할당되어 소멸되지 않는다.

5. 여러개의 파일을 이용해서 개발할때

AAA 파일에 int erp; 라는 변수가 외부변수라 선언되어 있다면

BBB, CCC 파일에서 erp 라는 변수를 사용하고 싶다면

BBB, CCC 파일에 extern 으로 선언한다. 이렇게 하면 erp라는 변수를 참조할수 있다. 이것을

BBB, CCC 에서는 extern int erp; 라고 해서 사용한다.

외부파일을 참조한다는것을 선언하면 메모리 할당은 하지 않고, 각 화일 간에는 자료를 공유하게 된다.

또한 참조를 함수내에서 하게되면 해당 함수내에서만 사용가능하다. 물론 외부참조를 하면

해당 파일내에서 전부사용가능하다.

즉, extern 이라고 한다면 자기파일이 아닌 다른파일에 외부변수로 선언되었다는것을 알수있고,

여기서는 그것을 사용하기만 하면된다.

me) 외부변수를 많이 사용하면 부작용(side-effect)가 발생할 확률이 높고, 함수간의 독립성을

저해시킬수 있다.

6. 정적변수(static)변수에도 내부 정적변수와 외부정적변수가 있다.

내부정적변수는 함수내부에 선언되어 사용되는 변수로서 자료의 값이 소멸되지 않고, 메모리에

영구적으로 존재하는 변수이다. 함수실행후에 값이 유지되기 때문에 이전값을 알수 있고, 모듈의 독립성을 보장을 위해 사용되는 변수이다.

void sum()

{

static int sdt = 0; 처음에만 0 값이고 처음에만 초기화 되고, 다음함수에 들어올때는 초기화되지 않고 사용가능하다.값이 유지된다.

}

7. 외부정적변수는 함수의 외부에 선언된 정적변수로서 해당 파일내에서만 사용가능하고, 전체

함수에서 사용될수 있는 변수이다. 다른파일에서는 사용불가능하다. 즉 외부 참조할수 없다.

그러므로, 다른 파일에 같은 이름이 존재하는 외부정적변수가 있더라도 서로 영향을 미치지 않는다.