Norm 공식 문서
C에서 함수를
static
으로 선언하는것은 그 함수를 해당 소스파일에서만 사용가능하게 한다. 외부에서도 호출할 함수 외에는 기본적으로staic
함수로 선언함이 유리하다.
static
을 사용하는 이유?
⇒ 소스 파일 내부에서만 사용하는 함수의 경우, 굳이 외부로 노출 시킬 필요가 없기 때문에코드 안정화
다른 파일에서 의도치 않게 어떤 함수를 호출하는 경우를 막는다.
하나의 프로그램을 함께 개발하는 다수의 개발자가 각각 소스 파일을 작성하였는데 우연히 동일한 이름의 함수가 존재하여 충돌을 일으킬 수도 있다. static
키워드를 붙이면 이런 문제가 해결된다.
위 두 소스파일을 함께 컴파일시 링크 에러가 발생하지 않고 정상적으로 빌드된다. 둘 중 하나에만 static을 붙여도 되는 것 같다.
가독성 증가
static
키워드가 붙어있는 것을 보면 그 함수는 다른 파일에서 사용하지 않는다는 것을 곧바로 알 수 있다. 코드 분석 시 이 함수가 어디에서 사용되었는지 헤맬 필요가 없으니 읽는데 들일 시간이 줄어든다!!중복 함수명 허용
static
함수는 해당 파일 내부에서만 사용할 수 있기 때문에 같은 이름의 함수를 여러개의 파일에 생성할 수 있게 된다.
https://42born2code.slack.com/archives/CU6MU5TB7/p1638442339066600?thread_ts=1638431954.056300&cid=CU6MU5TB7
⇒ 다른 파일에서 참조할 일이 없는 함수들에 대해 static으로 함수를 정의하는 것은 분명 좋은 습관이지만, libft는 함수들간 충돌이 일어날 만큼 프로젝트의 규모가 크지 않고, 컨벤션*이 명확하므로 꼭 해야 할 필요는 없다. 만약 static 처리를 하기로 결정했다면, 혼란을 방지하기 위해 이 코딩 컨벤션을 확실히 지켜야한다. (어떤 것은 static 처리를 하고 어떤 것은 하지 않는다면 안하느니만 못하다.)
<aside>
💡 코딩 컨벤션(convention) (관습, 조약, 협약)
읽고, 관리하기 쉬운 코드를 작성하기 위한 일종의 코딩 스타일 규약(하나의 작성 표준)으로, 간단히 말해 코딩 규칙을 통일하는 것.
(예를 들어 Libft 과제에서는 함수 이름에 접두어로 오는 식별자가 ft_
로 통일되어있음)
</aside>