함수는 기본적으로 외부 링키지를 가지며, 프로젝트의 다른 어떤 파일에서든 호출할 수 있어요.
링키지에 대한 자세한 내용은 링키지 개념을 참고해요.
static 함수는 정의된 소스 파일 안에서만 호출할 수 있어요.
예를 들어
// file scope, internal linkage
// can only be called from within this file
static void some_function()
{
// code snipped
}
// file scope, external linkage by default
// can be called from any other file in the project
int main()
{
// code snipped
}
함수가 헤더에 선언되어 있더라도 static으로 정의하면 해당 소스 파일 밖에서는 호출할 수 없어요.
소스 파일이 그 헤더를 포함하고, 헤더에 선언된 static 함수를 호출한 뒤 컴파일하는 것까지는 성공할 수 있지만, 링커는 static 함수 정의를 찾지 못해요.
소스 파일에서 static으로 표시한 함수는 그 헤더 파일에 선언하면 안 돼요.