내 (제한적-나는 일반적으로 C 개발자가 아닙니다) 이해에, 이것은 C에 뿌리를두고 있습니다. C는 클래스 또는 네임 스페이스가 무엇인지 알지 못한다는 것을 하나의 긴 프로그램 일뿐입니다. 또한 함수를 사용하기 전에 선언해야합니다.
예를 들어, 다음은 컴파일러 오류를 제공해야합니다.
void SomeFunction() {
SomeOtherFunction();
}
void SomeOtherFunction() {
printf("What?");
}
선언하기 전에 호출하기 때문에 "SomeOtherFunction이 선언되지 않았습니다"라는 오류가 발생합니다. 이 문제를 해결하는 한 가지 방법은 SomeOtherFunction을 SomeFunction 위로 이동하는 것입니다. 또 다른 방법은 함수 서명을 먼저 선언하는 것입니다.
void SomeOtherFunction();
void SomeFunction() {
SomeOtherFunction();
}
void SomeOtherFunction() {
printf("What?");
}
이를 통해 컴파일러는 다음과 같은 사실을 알 수 있습니다. 코드 어딘가에 보이면 SomeOtherFunction이라는 함수가 있습니다. 따라서 SomeOtherFunction을 호출하는 코드를 권장하는 경우 당황하지 말고 대신 찾으십시오.
이제 두 개의 다른 .c 파일에 SomeFunction과 SomeOtherFunction이 있다고 가정하십시오. 그런 다음 Some.c에서 # SomeOther.c를 #include해야합니다. 이제 SomeOther.c에 "비공개"기능을 추가하십시오. C는 개인 함수를 알지 못하므로 Some.c에서도 해당 함수를 사용할 수 있습니다.
이것은 .h 파일이 들어오는 곳입니다. 다른 .c 파일에서 액세스 할 수있는 .c 파일에서 '내보내기'하려는 모든 함수 (및 변수)를 지정합니다. 이렇게하면 공개 / 개인 범위와 같은 것을 얻게됩니다. 또한 소스 코드를 공유 할 필요없이이 .h 파일을 다른 사람에게 제공 할 수 있습니다. .h 파일은 컴파일 된 .lib 파일에 대해서도 작동합니다.
따라서 주된 이유는 실제로 편의성, 소스 코드 보호 및 응용 프로그램 부분간에 약간의 분리가 있기 때문입니다.
그래도 C였습니다. C ++에는 클래스와 개인 / 공개 수정자가 도입되었으므로 여전히 필요한지 물어볼 수는 있지만 C ++ AFAIK는 여전히 사용하기 전에 함수 선언이 필요합니다. 또한 많은 C ++ 개발자는 C 개발자이거나 C 개발자이며 개념과 습관을 C ++로 인수했습니다. 왜 부서지지 않은 것을 변경합니까?