Programing

.cpp 파일과 .h 파일의 차이점은 무엇입니까?

lottogame 2020. 12. 30. 07:37
반응형

.cpp 파일과 .h 파일의 차이점은 무엇입니까?


.cpp 파일을 만든 다음 .h 파일로 전송했기 때문에 내가 찾을 수있는 유일한 차이점은 .cpp 파일을 #include 할 수 없다는 것입니다. 내가 놓친 차이점이 있습니까?


C ++ 빌드 시스템 (컴파일러)은 차이를 알지 못하므로 모두 규칙 중 하나입니다.

규칙은 .h 파일이 선언이고 .cpp 파일이 정의라는 것입니다.

그래서 .h 파일이 #included-우리는 선언을 포함합니다.


.cpp 파일은 컴파일 단위입니다. 컴파일 될 실제 소스 코드 파일입니다 (C ++).

.h (헤더) 파일은 #include 프리 컴파일러 명령어가 나타나는 .cpp 파일에 가상으로 복사 / 붙여 넣을 파일입니다. 헤더 코드가 .cpp 코드에 삽입되면 .cpp 컴파일을 시작할 수 있습니다.


나는 선언과 정의의 차이점을 알고 있습니다.

이므로:

  • CPP 파일에는 포함 된 모든 헤더의 정의가 포함됩니다 (CPP와 헤더 파일이 함께 단일 '번역 단위'가되기 때문).
  • 헤더 파일은 둘 이상의 CPP 파일에 포함될 수 있습니다.
  • 링커는 일반적으로 하나 이상의 CPP 파일에 정의 된 것을 좋아하지 않습니다.

따라서 헤더 파일의 모든 정의는 인라인 또는 정적이어야합니다. 헤더 파일에는 둘 이상의 CPP 파일에서 사용되는 선언도 포함됩니다.

정적이거나 인라인이 아닌 정의는 CPP 파일에 배치됩니다. 또한 하나의 CPP 파일 내에서만 필요한 선언은 종종 (공유 가능한) 헤더 파일 대신 해당 CPP 파일 자체에 배치됩니다.


.h 파일 또는 헤더 파일은 클래스 선언에서 공개적으로 액세스 할 수있는 인스턴스 변수 및 메서드를 나열하는 데 사용됩니다. .cpp 파일 또는 구현 파일은 이러한 메서드를 실제로 구현하고 해당 인스턴스 변수를 사용하는 데 사용됩니다.

.h 파일은 바이너리 코드로 컴파일되지 않고 .cpp 파일은 컴파일되지 않기 때문입니다. 예를 들어 도서관을 생각해보십시오. 당신이 저자이고 그것이 오픈 소스가되기를 원하지 않는다고 가정하자. 따라서 컴파일 된 바이너리 라이브러리와 헤더 파일을 고객에게 배포합니다. 이를 통해 라이브러리의 클래스에 대한 모든 정보를 쉽게 볼 수 있으며 이러한 메서드를 구현 한 방법을 볼 수 없습니다. 컴파일러보다는 코드를 사용하는 사람들을위한 것입니다. 이전에 말했듯이, 그것은 컨벤션입니다.


헤더 ( .h,, .hpp...) 파일에는

  • 클래스 정의 ( class X { ... };)
  • 인라인 함수 정의 ( inline int get_cpus() { ... })
  • 함수 선언 ( void help();)
  • 객체 선언 ( extern int debug_enabled;)

소스 파일 ( .c, .cpp, .cxx)가 포함

  • 함수 정의 ( void help() { ... }또는 void X::f() { ... })
  • 객체 정의 ( int debug_enabled = 1;)

그러나 헤더는 .h접미사로 명명하고 소스 파일은 접미사 로 명명하는 규칙 .cpp은 실제로 필요하지 않습니다. 파일 이름 접미사 ( -x <file-type>for gcc. Like -x c++)에 관계없이 파일을 처리하는 방법을 항상 좋은 컴파일러에게 알려줄 수 있습니다 .

소스 파일에는 전체 프로그램에서 한 번만 존재해야하는 정의가 포함됩니다. 따라서 어딘가에 소스 파일을 포함시킨 다음 해당 파일의 컴파일 결과를 연결 한 다음 소스 파일 자체 중 하나를 함께 연결하면 해당 정의가 이제 두 번 나타나기 때문에 물론 링커 오류가 발생합니다. 소스 파일이 포함 된 다음 포함 된 파일에서. 이것이 .cpp파일 을 포함하는 데 문제가있는 이유 입니다.


다른 사람들은 이미 좋은 설명을 제공했지만 다양한 확장 기능의 차이점을 명확히해야한다고 생각했습니다.

  C의 소스 파일 : .c
  C의 헤더 파일 : .h

  C ++ 용 소스 파일 : .cpp
  C ++ 용 헤더 파일 : .hpp

물론 이미 지적했듯이 이것들은 단지 관습 일뿐입니다. 컴파일러는 실제로 그것들에주의를 기울이지 않습니다. 순전히 코더의 이익을위한 것입니다.


경험상 좋은 규칙은 ".h 파일에는 여러 소스 파일에서 [잠재적으로] 사용되는 선언이 있어야하지만 실행되는 코드는 없어야합니다."


관례 상 .h 파일은 다른 파일에 포함되며 스스로 직접 컴파일하지 않습니다. .cpp 파일은 일반적으로 컴파일 프로세스의 뿌리입니다. .h 파일을 직접 또는 간접적으로 포함하지만 일반적으로 .cpp 파일은 포함하지 않습니다.

참조 URL : https://stackoverflow.com/questions/875479/what-is-the-difference-between-a-cpp-file-and-ah-file

반응형