79 .3 기억 부류 지정장 예제 중 질문 드립니다.
, 윤 용곤님이 작성우선 해당 교재와 사이트 덕분에 c언어를 잘 공부하고 있습니다. 정말 감사드립니다.
해당 교재 내, 예제를 따라 해보다가 궁금한 점이 생겨 문의 드립니다.
79.3 정적 함수 사용하기 (1166p) 예제에서 print.c 에 저장할 내용을 실수로 print.h 에 저장했더니, 에러 없이 실행이 되었습니다.
해당 내용을 인터넷에 찾아 보았으나, 관련 답변을 얻을 수 없었습니다.
혹시 가능하시면 답변 부탁드립니다.
감사합니다.
Re: 79 .3 기억 부류 지정장 예제 중 질문 드립니다.
, 도장_ 관리자님이 작성헤더 파일(.h)과 구현 파일(.c)로 구분하는 것은 C 언어의 관례이지만, 반드시 강제된 것은 아닙니다.
구현은 헤더 파일에 두는 것도 가능은 합니다. 이에 대한 규정은 없습니다.
C++ 언어에서는 헤더 파일에 구현을 두는 것도 종종 볼 수 있으며 이상한 일이 아닌 것도 그런 이유 때문입니다. 표준에서는 강제하지 않으니까요.
다만, 헤더 파일은 인터페이스 역할을 합니다. 이런 저런 함수가 있다고 알려주는 역할을 합니다.
헤더 파일과 구현 파일로 분리하면 명백한 장점이 있기 때문에 대부분은 이러한 관례를 따르고 있습니다. 예를 들어 헤더 파일과 구현 파일을 분리하지 않고 my_lib.c에 모든 것을 구현하고 my_lib.c를 include하는 구현을 했다면 my_lib.c를 10번 인클루드하면 10개의 복제본이 코드에서 생기고, 코드 크기는 비대해집니다. 정적 함수라면 중복 이름을 가질 수 없으니 이름 충돌이 발생하니 컴파일이 되지 않는 문제도 생길 겁니다. 파일 범위라면 중복 이름을 가져도 문제가 되지 않으나 코드 크기가 비대해지는 문제가 발생합니다.
구현 파일을 따로 두면 코드는 하나만 컴파일되고, 바이너리에도 하나만 들어가게 됩니다. 헤더 파일을 통해 인터페이스를 알고 있으니 이를 호출해서 사용할 수 있습니다.
C 언어는 강제로 규정하지 않기 때문에 이렇게 해봤더니 동작하더라는 매우 많지만, 그렇다고 해서 그게 해도 되는 동작은 아닙니다.