본문 바로가기

Info

Info - static 헤더에 사용 불가

간혹 초보들 중에 static으로 지정한 함수의 선언을 헤더에 넣었더니 경고나 에러나 나더라

하는 분들이 있다.

그런데 이거 아주 당연한 거다.
static으로 지정된 함수는 의미상 해당 파일의 스코프로 제한된 함수가 된다.

그런데 그 스코프를 벗어난 헤더파일이나 다른 파일에 선언등이 있으면 당연하게 헤더에 있는 선언과 해당 구현 파일에 있는 정의가 서로 다른 함수가 되어 경고나 에러가 나게 된다.

예를들면

test.h
static aa();

test.cpp
#include "test.h"
static aa(){}

의 경우 둘은 서로 다른 aa함수라고 컴파일러와 링커가 인식하게 된다.


이걸 해결하려면 헤더파일에 있는 함수의 선언에 extern을 붙여주면 된다.

팁아닌 팁이랄까;;;