programing

머리글을 별도의 디렉토리에 배치해야 하는 이유는 무엇입니까?

powerit 2023. 7. 27. 22:23
반응형

머리글을 별도의 디렉토리에 배치해야 하는 이유는 무엇입니까?

C/C++ 프로젝트에서 헤더 파일을 다음과 같은 디렉토리에 배치하는 것이 일반적이라는 것을 알고 있습니다.include다음과 같은 별도의 디렉토리에서 구현src저는 여러 프로젝트 구조를 가지고 놀고 있는데, 이에 대한 객관적인 이유가 있는지 아니면 단순히 관례적인 것인지 궁금합니다.

관습이 그 이유 중 하나입니다. 대부분의 경우 효과적인 추상화를 사용하면 인터페이스에만 관심을 두고 머리글만 보고 쉽게 사용할 수 있습니다.

하지만 그것이 유일한 이유는 아닙니다.프로젝트가 모듈로 구성된 경우, 대부분 다른 모듈에 일부 헤더를 포함해야 하며, 포함 디렉터리에서 다른 "잡음" 파일을 치료해야 합니다.

또한 모듈을 재배포하려는 경우 구현 세부 정보를 숨기고 싶을 수 있습니다.따라서 헤더와 바이너리만 제공할 수 있으며, 다른 폴더 없이 단일 폴더에서 헤더를 배포하는 것이 더 간단합니다.

또한 실제로 선호하는 대안이 있습니다. 공용 헤더는 별도의 폴더(최소 인터페이스 포함 - 구현 세부 정보가 전혀 표시되지 않음)에 들어가고, 개인 헤더와 구현 파일은 별도의 폴더에 있을 수 있지만 반드시 필요한 것은 아닙니다.

저는 그것들을 같은 디렉토리에 넣는 것을 선호합니다.이유:

인터페이스 규격 파일 및 해당 인터페이스를 구현하는 원본 파일은 프로젝트의 동일한 부분에 속합니다.있다고 하시오subsystemx그러면.subsystemx의 파일subsystemx디렉토리,subsustemx는 자체적으로 포함됩니다.

포함 파일이 많은 경우에는 다음을 수행할 수 있습니다.subsystemx/include그리고.subsystemx/source하지만 만약 당신이 정의를 내린다면, 저는 주장합니다.class Foofoo.hpp,그리고.foo.cpp디렉터리 목록에서 둘 다(또는 적어도 쉽게 볼 수 있는 가능성이 있음) 보기를 원할 것입니다.관련된 모든 파일 찾기foo

ls foo*

모든 구현 파일 찾기:

ls *.cpp

모든 선언 파일 찾기:

ls *.hpp

간편하고 깨끗합니다.

폴더 구조를 더 깨끗하게 유지합니다.머리글과 원본 파일은 분명히 다르며, 다른 용도로 사용되므로 구분하는 것이 좋습니다.이러한 관점에서 질문은 기본적으로 "소스 파일과 설명서가 다른 폴더에 저장되는 이유"와 동일합니다.컴퓨터는 여러분이 폴더에 무엇을 넣었는지와 그렇지 않은 것에 대해 매우 불가지론적입니다. 대부분의 경우, 폴더는 우리 인간이 정보를 분석하고 저장하고 기억하는 방식 때문에 유용한 추상화일 뿐입니다.

또한 라이브러리를 구축한 후에도 헤더 파일이 유용하게 유지된다는 사실도 있습니다. 예를 들어, 라이브러리를 구축할 때 누군가가 해당 라이브러리를 사용하려면 소스 파일이 아닌 헤더 파일이 필요합니다. 그래서 헤더 파일을 묶어서 안에 있는 것을 집어넣을 수 있습니다.bin그리고 그 안에 있는 것들.include로 거르지 .src 쉽습니다

게다가 (논쟁이 가능한가요?질서를 유지하는 데 유용하고, 다른 프로젝트 등에서 유용하며, 한 가지 매우 중립적이고 객관적인 장점이 있습니다: 컴파일 시간.

묶음이 큰 파일)의에 따라 (.c/.cpp 파일)를 합니다.#include "headername.h"#include "../../gfx/misc/something/headername.h"그리고 컴파일러가 올바른 매개 변수를 전달하여 이를 삼킬 수 있습니다.) 올바른 헤더를 검색하기 위해 컴파일러가 검색해야 하는 항목의 수를 크게 줄일 수 있습니다.대부분의 컴파일러는 컴파일된 각 파일에 대해 개별적으로 시작되므로 포함 경로의 파일 목록에서 읽고 컴파일된 각 파일에 대한 올바른 헤더를 찾아야 합니다.포함 경로에 .c, .o 및 기타 관련 없는 파일이 많이 있는 경우 포함 경로를 찾는 데 시간이 비례적으로 더 오래 걸립니다.

간단히 말해서, 몇 가지 이유:

  • 유지관리 가능한 코드.
  • 코드는 잘 디자인되어 있고 깔끔합니다.
  • 컴파일 시간 단축(경우에 따라 사소한 변경사항도 가능)
  • 문서화 등을 위해 인터페이스를 보다 쉽게 분리할 수 있습니다.
  • 컴파일 시 순환 종속성을 피할 수 있습니다.
  • 검토하기 쉽습니다.

C와 C++의 코드 파일을 정리하는 기사를 잘 설명합니다.

언급URL : https://stackoverflow.com/questions/13967296/why-place-headers-in-a-separate-directory

반응형