본문 바로가기
카테고리 없음

static & extern (변수와 함수에 사용시)

by ByteBridge 2013. 3. 6.
반응형


정적 함수 :


-> static 함수: 전역 함수로 취급 되지만, 선언된 영역에서만 호출 가능하다.

# static 함수는 소스 코드 내에서 은페성을 높이기 위해 매우 중요한 요소이다.

# static 을 붙이면 해당 함수의 접근은 해당 파일 내로 제한한다.

즉 그 파일 내에서만 통용되는 완전한 로컬 함수로 취급 할수있다

단점 : 다른 파일과 함수명의 충돌이 있을지 걱정하지 않아도 된다.

다른 파일 에서는 그 함수를 호출하지 않는것이 보장된다.


-> 클래스의 멤버 함수로의 static 함수

* 실제로 클래스의 멤버 함수가 아니라 전역 함수이지만 그 클래스의 영역 내에서만 사용 가능

* 전역 함수이므로 클래스의 인스턴스를 생성하지 않고 호출 할수있다.


-> 주의 사항

* 선언된 클래스의 다른 멤버 변수나 멤버 함수를 직접 호출 할수없다.

* 그러기 위해서는 클래스 인스턴스를 함수가 전달 받아야 한다.


전역 extern


-> 함수 에 extern 을 붙여주면 외부 에 공개 즉 다른 파일 내에서 접근 허용 가능 하다

: 만약 다른 소스 파일에서 어떤 함수를 호출 하려고 할때, 해당 파일 내에서는

함수의 형식 ( 인자와 반환 형식)을 알고 있어야 되는데 이때 extern 을 붙여주면 된다.

: 함수의 경우에는 default 로 전역 함수가 되므로 extern 은 생략 해도 된다.



변수의 경우 static 과 extern


static :


-> 변수의 경우에도 함수와 마찬가지로 파일 외부로 공개 유무에 따라서 static 또는 extern 을 

사용한다

하지만함수에서 사용할때와는 조금 차이가난다.

-> 함수 내부에서 static 을 사용했을경우 범위는 함수안에서만 유효범위가 된다.

: 함수 외부에서의 접근은 거부된다.



: 외부에서 접근 제한되므로 Get/Set 함수를 통해서 해당 변수를 제어한다(보통)


extern: 


-> extern 을 선언 함으로써 다른 파일에서 정의된변수의 형식을 컴파일러에게 알려줄수있다.

-> extern 을 붙여주어서 외부에 선언된 변수가 있다는것을 알릴수있다.

: 하지만 해당 변수에 static형 일경우에는 해당 변수를 발견할수없다는 메시지와 함께 에러 발생



요약: 

변수 

static : 변수 정의(파일 외부에 공개하지 않는다)

static 없을경우 : 변수 정의 (파일 외부에 공개한다.)

extern : 변수 선언(정의는 없다)

함수 정의

static : 파일 외부에 공개하지않는다.

static 없을 경우 : 파일 외부에 공개한다.

extern : 파일 외부에 공개한다.

함수의 원형 선언ㅁ

static : 공개하지 않는 함수의 원형 선언(같은 파일 내에)

static 없을경우 : 공개하는 함수의 원형 선언

extern : 공개하는 함수의 원형 선언


출처 : 일상에서의 탈출 (다음 블로그)










반응형