정적 함수로 만들어주는 static
함수를 정의할 때 static을 붙이면 해당 함수는 다른 파일에서 호출하지 못하는 정적함수가 된다.
#include <stdio.h> #include <stdlib.h> #include <stdint.h> static uint32_t sum(uint32_t a, uint32_t b) /* 현재 파일(main.c)에서만 호출 가능 */ { return a+b; } int main() { printf("%d", sum(1, 2)); }
내가 겪은 정적함수를 사용하는 이유는 다음과 같다.
코드 안정화
선임중에 다른 파일에서 사용하지 않는 모든 함수는 static을 붙이는 분이 계셨다. 이렇게 함으로써 다른 파일에서 의도치 않게 어떤 함수를 호출하는 경우를 막는다. 하나의 예를 들자면, a파일을 A가 개발하고 b파일을 B가 개발했는데, 두 개의 파일을 병합하려고 보니 내용도 다르고 작성자도 다르지만 동일 이름의 함수가 존재하여 충돌을 일으킬 수 있다.
가독성 증가
static이 붙어있는 함수는 다른파일에서 사용하지 않는다고 곧바로 알 수 있다. 코드 분석 시 이 함수가 어디에서 사용되었는지 멀리 헤맬 필요가 없어진다.
중복 함수명 허용
static을 사용하면 해당 함수는 해당 파일에서만 사용할 수 있기 때문에 같은 이름의 함수를 여러개의 파일에 생성할 수 있게 된다. 특정 파일과 유사한 파일을 하나 더 만들고 싶을 때 변수명의 중복은 피해야 하므로 새로 만든 파일의 모든 함수에 static을 붙이는 경우를 본 적이 있다. 이런 용도로 활용할 수 있지만 이것이 일반적으로 권장되는 것인지는 모르겠다.