C ++에서 .inl 파일의 중요성 어떤 이점이 있습니까?

.inl 파일에 선언을하면 어떤 이점이 있습니까? 언제 똑같이 사용해야합니까?



답변

.inl파일은 필수가 아니며 컴파일러에 특별한 의미가 없습니다. 코드를 읽을 수있는 사람에게 힌트를 제공하는 코드 구조화 방법 일뿐입니다.

.inl두 가지 경우에 파일을 사용 합니다.

  • 인라인 함수의 정의.
  • 기능 템플릿의 정의.

두 경우 모두, 나는 그때, 다른 파일이 포함 된 헤더 파일에 함수의 선언을 넣어#include.inl 헤더 파일의 맨 아래에 파일을.

인터페이스와 구현을 분리하고 헤더 파일을 좀 더 쉽게 읽을 수 있기 때문에 마음에 듭니다. 구현 세부 사항에 관심이있는 경우 .inl파일을 열고 읽을 수 있습니다. 그렇지 않다면 그럴 필요가 없습니다.


답변

닉 마이어 말이 맞습니다. 컴파일러는 포함하는 파일의 확장자를 신경 쓰지 않습니다. 따라서 “.h”, “.hpp”, “.hxx”, “.hh”, “.inl”, “.inc”등은 파일에 포함되어야하는 내용을 명확하게하기위한 간단한 규칙입니다.

가장 좋은 예는 확장자가 전혀없는 STL 헤더 파일입니다.

일반적으로 “.inl”파일에는 인라인 코드 가 포함되어 있습니다 (따라서 “.inl”확장자).

이러한 파일 “.inl”파일은 헤더 간에 종속성주기가있을 때 필요합니다. 코드 합니다.

예를 들면 :

// A.hpp
struct A
{
    void doSomethingElse()
    {
       // Etc.
    }

    void doSomething(B & b)
    {
       b.doSomethingElse() ;
    }
} ;

과:

// B.hpp
struct B
{
    void doSomethingElse()
    {
       // Etc.
    }

    void doSomething(A & a)
    {
       a.doSomethingElse() ;
    }
} ;

순방향 선언을 사용하는 것을 포함하여 컴파일 할 방법이 없습니다.

해결책은 정의와 구현을 두 종류의 헤더 파일로 나누는 것입니다.

  • hpp 헤더 선언 / 정의
  • inl 헤더 구현 용

다음 예제로 나뉩니다.

// A.hpp

struct B ;

struct A
{
    void doSomethingElse() ;
    void doSomething(B & b) ;
} ;

과:

// A.inl
#include <A.hpp>
#include <B.hpp>

inline void A::doSomethingElse()
{
   // Etc.
}

inline void A::doSomething(B & b)
{
   b.doSomethingElse() ;
}

과:

// B.hpp

struct A ;

struct B
{
    void doSomethingElse() ;
    void doSomething(A & a) ;
} ;

과:

// B.INL
#include <B.hpp>
#include <A.hpp>

inline void B::doSomethingElse()
{
   // Etc.
}

inline void B::doSomething(A & a)
{
   a.doSomethingElse() ;
}

이렇게하면 자신의 소스에 필요한 “.inl”파일을 포함 할 수 있으며 제대로 작동합니다.

다시 말하지만, 포함 된 파일의 접미사 이름은 실제로 중요하지 않고 용도 만 중요합니다.


답변

아무도 언급하지 않았기 때문에 :

.inl 파일을 사용하여 인라인 함수를 저장하면 컴파일 속도를 높이는 데 유용 할 수 있습니다.

선언이 필요한 곳에 선언 (.h) 만 포함하고 필요한 곳에 인라인 구현 (.inl) 만 포함하는 경우 (예 : .h가 아닌 .cpp 및 기타 .inl 파일에서만 가능) 헤더 종속성에 유익한 효과.

이것은 상호 작용하는 클래스가 많은 대규모 프로젝트에서 중요한 승리가 될 수 있습니다.


답변

내 경험상 .inl 파일은 인라인 함수를 정의하는 데 사용됩니다. .inl 파일에있는 경우 파일을 헤더에 포함하여 인라인 함수를 가져오고 .c 파일에 포함하여 일반 함수 정의를 가져올 수 있습니다.

이렇게하면 동일한 소스가 인라인 함수를 지원하지 않는 컴파일러 및 지원하는 컴파일러에서 더 쉽게 작업 할 수 있습니다.

일반적으로 모든 C ++ 컴파일러가 인라인 함수를 지원하므로 C ++ 코드에서는 자주 사용되지 않는 직선 C 코드와 함께 사용됩니다.


답변

인라인 코드가 포함 된 “헤더”파일의 명명 규칙 일 뿐이라고 생각합니다. .h 파일은 정의를 포함 할 수 있고 .inl 파일은 템플릿에 필요한 인라인 코드를 포함 할 수 있습니다.

파일의 목적을 명확하게하기위한 명명 규칙 이상의 것이 있다고 믿지 않습니다.