79.3 정적 함수 사용하기
이번에는 정적 함수를 알아보겠습니다. 다음 내용을 프로젝트 디렉터리에 print.c로 저장하세요(반드시 프로젝트에 포함해야 합니다).
print.c
#include <stdio.h> void print() // print.c에서 print 함수 선언 및 정의 { printf("print.c\n"); }
이제 main 함수가 있는 소스 파일입니다. 다음 내용을 프로젝트 디렉터리에 main.c로 저장하세요.
main.c
#include <stdio.h> void print() // main.c에서 print 함수 정의 { printf("main.c\n"); } int main() { print(); return 0; }
컴파일결과
fatal error LNK1169: 여러 번 정의된 기호가 있습니다.
소스 파일 print.c와 main.c에 같은 이름으로 된 함수 print를 정의했습니다. 이 상태에서 컴파일을 해보면 컴파일(링크) 에러가 발생합니다. 즉, 한 프로젝트 안에서는 함수 이름이 중복될 수 없습니다.
main.c 파일의 내용을 다음과 같이 수정하여 실행해보세요.
main.c
#include <stdio.h> static void print() // main.c에서 print을 정적 함수로 정의 { printf("main.c\n"); } int main() { print(); return 0; }
실행 결과
main.c
함수 print를 선언하고 정의할 때 앞에 static 키워드를 붙여서 정적 함수로 만들었습니다. 이제 컴파일 에러가 발생하지 않고 실행도 잘 됩니다.
여기서 static을 붙인 정적 함수 print는 main.c 파일 안에서만 사용할 수 있습니다. 만약 print.c 파일의 print를 정적 함수로 만들었다면 print.c 파일 안에서만 사용할 수 있습니다.
이처럼 정적 함수를 사용하면 같은 이름을 가진 함수를 파일마다 만들 수 있습니다. 따라서 정적 함수는 기능이 여러 파일로 분리되어 있을 때 각 파일 안에서만 사용하는 기능을 구현할 수 있습니다.
지금까지 정적 변수와 정적 함수에 대해 배웠습니다. 정적 변수는 값이 계속 유지된다는 점, 정적 함수는 같은 소스 코드 안에서만 호출할 수 있다는 점만 기억하면 됩니다.