programing

헤더 파일을 C 프로그램에서 컴파일해야 합니까?

prostudy 2022. 7. 16. 14:01
반응형

헤더 파일을 C 프로그램에서 컴파일해야 합니까?

C 프로그램을 이렇게 컴파일하는 사람이 가끔 있습니다.

gcc -o hello hello.c hello.h

제가 알기로는 다음과 같이 헤더 파일을 C 프로그램에 넣으면 됩니다.

#include "somefile"

C 프로그램을 컴파일합니다.gcc -o hello hello.c.

헤더 파일은 언제 컴파일해야 합니까? 왜 컴파일해야 합니까?

첫째, 일반적으로:

경우, ', '의 경우.h인 C 헤더 C라는 이름이 입니다)..h확장자)를 지정하면 이러한 헤더 파일을 개별적으로 "삭제"할 필요가 없습니다.헤더 파일은 컴파일러에 독립된 번역 유닛으로 공급되지 않고 구현 파일에 포함되도록 되어 있습니다.

일반적인 헤더 파일에는 일반적으로 각 변환 유닛에서 안전하게 반복할 수 있는 선언만 포함되어 있기 때문에 헤더 파일을 "컴파일"하는 것은 유해한 결과를 초래하지 않을 것으로 예상됩니다.하지만 동시에 그것은 유용한 것을 얻지 못할 것이다.

기본적으로는 '컴파일'입니다.hello.h에 합니다.dummy.c" " " "#include "hello.h"및그 「」, 「」, 「」, 「」의 .dummy.c이치노편찬되겠지만, 의미 있는 목적은 아닙니다.


둘째, 특히 GCC의 경우:

GCC를 사용하는 파일에 대해 있습니다..h명령줄 인수로 컴파일러에 제공될 때 확장자를 지정합니다.GCC는 이를 일반 변환 유닛으로 취급하지 않고 미리 컴파일된 헤더 파일을 만듭니다..hfilename을 클릭합니다.

자세한 것은, http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html 를 참조해 주세요.

'이러다', '이러다', '이러다', '이러다' 이렇게 수 요..hGCC를 사용하다

그럼 액티브 코드와 패시브 코드의 차이를 이해합시다.

활성 코드는 기능, 절차, 방법, 즉 실행 가능한 기계 코드로 컴파일해야 하는 코드 조각의 구현입니다..c파일에 저장하기 때문에 컴파일이 필요합니다.

패시브 코드 자체는 실행되지 않지만 서로 통신하는 방법을 모듈별로 설명해야 합니다.일반적으로 .h 파일에는 프로토타입(함수 헤더)과 구조만 포함됩니다.

매크로의 경우는 예외입니다만, 액티브한 조각을 정식으로 포함할 수 있습니다만, 매크로가 간단한 치환으로 빌드(전처리)의 초기 단계에서 사용되고 있는 것을 이해해 둘 필요가 있습니다.컴파일 시 매크로가 이미 .c 파일로 대체되어 있습니다.

또 다른 예외는 C++ 템플릿으로 .h 파일에 구현해야 합니다.그러나 매크로와 유사한 이야기가 있습니다. 매크로들은 초기 단계(인스턴스)에 대체되며, 형식적으로는 서로 인스턴스화(instantation)가 다른 유형입니다.

결론적으로 모듈이 제대로 형성되었다면 헤더 파일을 컴파일해서는 안 된다고 생각합니다.

다음과 같이 헤더 파일을 포함하면 #include <header>가 됩니다.h> 또는 #contract "syslog" 입니다.그러면 프리프로세서가 그것을 입력으로 받아들여 파일 전체를 소스 코드에 포함합니다.#preprocessor는 지정된 파일의 내용으로 #preposition 디렉티브를 대체합니다.GCC에 대한 -E 플래그를 사용하여 확인할 수 있습니다.GCC는 .i(정보 파일) 임시 파일을 생성하거나 GCC 실행 시 컴파일러 드라이버에 의해 자동으로 사용되는 cpp(LINUX) 모듈을 사용할 수 있습니다.따라서 실제로 소스 코드와 함께 컴파일되므로 컴파일할 필요가 없습니다.

일부 시스템에서는 완전히 해결된 '.c' 파일의 조립 속도를 높이려는 시도를 포함 파일의 사전 조립을 "compiling header files"라고 합니다.그러나 실제 C 개발에는 필요하지 않은 최적화 기법입니다.

이러한 기법은 기본적으로 include 문을 계산하고 평탄화된 include의 캐시를 유지하였다.일반적으로 C 툴체인은 포함된 파일에 재귀적으로 컷앤페이스트하여 컴파일러에 아이템 전체를 전달합니다.사전 컴파일된 헤더 캐시를 사용하면 툴 체인은 입력(정의, 헤더 등)이 변경되었는지 확인합니다.그렇지 않은 경우 이미 평탄화된 텍스트 파일의 스니펫을 컴파일러에 제공합니다.

이러한 시스템은 개발 속도를 높이기 위한 것이었지만, 그러한 많은 시스템은 매우 취약했습니다.컴퓨터의 속도가 빨라지고 소스 코드 관리 기술이 변경됨에 따라 공통 프로젝트에서 실제로 사용되는 헤더 프리 컴파일러의 수는 감소했습니다.

실제로 컴파일 최적화가 필요할 때까지 미리 컴파일된 헤더는 피하는 것이 좋습니다.

헤드파일을 전처리(컴파일이라고 부르지 않을 수도 있음)해야 할 것 같습니다.왜냐하면 컴파일 단계에서는 헤드파일이 c파일에 포함되어야 하기 때문입니다.예를 들어 test.h에서는

typedef enum{
    a,
    b,
    c
}test_t

그리고 test.c에는

void foo()
{
    test_t test;
    ...
}

컴파일을 하는 동안 컴파일러가 헤드파일과 c파일의 코드를 함께 넣고 헤드파일의 코드를 미리 수정하여 c파일의 코드를 대체할 것이라고 생각합니다.한편, makefile에 include path를 정의하는 것이 좋습니다.

헤더 파일을 컴파일할 필요는 없습니다.실제로는 아무것도 하지 않기 때문에 실행하려고 해도 의미가 없습니다.다만, 오타, 실수, 버그를 체크하는 좋은 방법이기 때문에, 나중에 간단하게 할 수 있습니다.

언급URL : https://stackoverflow.com/questions/17416719/do-i-need-to-compile-the-header-files-in-a-c-program

반응형