[씨] 구조체가 다른 파일에서 선언 될 때 구조체를 함수의 인수로 사용하는 방법은 무엇입니까?
전반적으로 여기에는 적절한 프로그램 디자인에 대해 많은 혼란이 있습니다.
관련 .h 파일에 모든 구조체 선언을 유지하려고합니다. 이를 통해 관련 헤더를 포함하여 .c 파일에서 사용할 수 있습니다.
이것은 개인 캡슐화가 없거나 구조체가 단순한 특성 인 경우 빠르고 더러운 프로그래밍에 허용되는 관행입니다.
그러나 구조체가 더 복잡한 ADT 등을 나타내는 전문 프로그램의 경우 헤더 파일에 전방 선언 만 유지하고 해당 c 파일 내에 구조체를 정의해야합니다. 이것은 개인 캡슐화 및 모듈화, 즉 좋은 프로그램 설계로 이어집니다. ( "불투명 유형"또는 "불투명 포인터"의 예를 검색하십시오. 이러한 전방 선언에 대한 공식 용어는 불완전 유형 입니다.)
당신이하려는 것은 위와 같지만 완전히 거꾸로 들립니다. 정의를 호출자에게 노출하되 직접 사용하지 마십시오. 그리고 분명히 당신은 당신의 프로그램에 포함하지 않고 보여주지 않은 구조체를 사용할 수 없습니다. 왜냐하면 그것은 말이되지 않기 때문입니다.
또한 다른 헤더 파일에 내 프로젝트의 헤더 파일이 포함되는 것을 피하고 있습니다. 이것은 코드를 읽고 유지하기 쉽게 만들 것이라고 생각합니다.
이것은 나쁜 생각입니다. 각 헤더 파일은 해당 c 파일의 기능과 사용 방법에 대한 공개 문서로 간주됩니다. c 파일은 개인 데이터로 간주 될 수 있지만 내용은 호출자가 관심을 가져야 할 내용이 아닙니다.
헤더 파일 문서의 중요한 부분은이 모듈에있는 모든 종속성을 나열하는 것이므로 다른 프로그래머가 헤더 파일의 맨 위를 빠르게 살펴보고이 특정 모듈을 컴파일하는 데 필요한 파일을 즉시 알 수 있습니다.
좋은 프로그램 디자인은 가능한 한 적은 의존성을 위해 노력합니다 : "느슨한 결합". 따라서 모두 #includes
헤더 파일의 맨 위에 올려야하는 중요한 정보로 간주됩니다. 사용되지 않는 헤더 파일은 포함되지 않아야합니다.
c 파일은 자체 헤더 파일을 제외하고는 어떤 포함도 포함하지 않아야합니다.
출처
https://stackoverflow.com/questions/39915893