스택큐힙리스트

extern inline은 함수가 외부에서 인라인 함수로 선언될 수 있음을 나타냅니다. 인라인 함수는 함수 호출의 부담을 줄이기 위해 코드를 인라인으로 삽입하는 것을 의미합니다. extern 키워드는 해.. 본문

카테고리 없음

extern inline은 함수가 외부에서 인라인 함수로 선언될 수 있음을 나타냅니다. 인라인 함수는 함수 호출의 부담을 줄이기 위해 코드를 인라인으로 삽입하는 것을 의미합니다. extern 키워드는 해..

스택큐힙리스트 2023. 11. 18. 00:19
반응형

나는 inline 단독으로는 컴파일러에게 제안일 뿐이며, 컴파일러는 재량에 따라 함수를 인라인으로 처리하거나 처리하지 않을 수 있고, 인라인 된 경우 링크 가능한 오브젝트 코드를 생성합니다.


static inline도 동일한 방식으로 동작하지만 인라인 된 경우 다른 모듈이 이에 대한 링크를 할 수 없으므로 링크 가능한 오브젝트 코드를 생성하지 않습니다.


extern inline은 이미지 속에 어울럽다?


전처리 매크로를 인라인 함수로 대체하고, 이 함수가 인라인 되도록 요구하며 (예: 호출한 함수에 대해 해결되어야 하는 __FILE____LINE__ 매크로를 사용하는 경우), 함수가 인라인되지 않은 경우 컴파일러 또는 링커 오류가 표시되도록 하려고합니다. extern inline은 이것을 수행합니까? (그렇지 않은 경우 매크로로 계속 사용하는것 외에 이 동작을 달성하는 방법이 없다고 가정합니다.)

C++과 C 사이에는 차이가 있을까요?


다른 컴파일러 공급업체와 버전 간에는 차이가 있을까요?

답변 1


  • 인라인: 함수가 인라인으로 작성될 수 있음 (단지 힌트일 뿐임). 그러나 항상 외부에서 볼 수 있는 링크 시간에 중복된 심볼이 생길 수 있으므로 외부로 작성된 버전이 항상 생성됩니다. 따라서 한 컴파일 단위에서만 이러한 인라인이 정의될 수 있으며, 다른 컴파일 단위에서는 외부로 작성된 함수를 볼 수 있어야 합니다 (그렇지 않으면 링크 시간에 중복된 심볼이 발생합니다).

  • extern inline: 외부로 작성된 버전은 생성되지 않을 수 있지만, 호출될 수 있습니다 (따라서 다른 컴파일 단위에서 이를 정의해야 합니다. 그러나 일정한 정의 규칙이 적용됩니다. 외부로 작성된 버전은 여기에 제공된 인라인 코드와 동일한 코드여야 합니다.

  • static inline: 외부로 볼 수 있는 외부로 작성된 버전은 생성되지 않을 수 있지만, 파일 내에서 정적인 버전이 생성될 수 있습니다. 일정한 정의 규칙은 적용되지 않습니다. 외부 심볼이 생성되거나 호출되지 않기 때문입니다.


C99 (또는 GNU99):


  • inline: GNU89 extern inline과 유사하며, 외부에서 볼 수 있는 함수는 생성되지 않지만 호출될 수 있고, 따라서 존재해야 합니다.

  • extern inline: GNU89 inline과 유사하며, 외부에서 볼 수 있는 코드가 생성되므로 최대한 한 개의 번역 단위만 이를 사용할 수 있습니다.

  • static inline: GNU89 static inline과 유사합니다. 이는 gnu89과 c99 사이에서 유일하게 이식 가능합니다.


C++:


어디서든 inline으로 정의된 함수는 동일한 정의와 함께 어디에서든 inline이어야 합니다. 컴파일러/링커는 심볼의 다중 인스턴스를 처리할 것입니다. static inline 또는 extern inline의 정의는 없지만, 많은 컴파일러가 그러한 정의를 가지고 있습니다(일반적으로 gnu89 모델을 따릅니다).

답변 2

extern inline는 C 프로그래밍 언어에서 사용되는 키워드입니다. C 언어에서 인라인 함수는 일반 함수와 동일한 작업을 수행하지만, 함수 호출 대신에 함수 내용이 호출된 부분에 직접 삽입됩니다. 이렇게 하면 함수 호출로 인한 오버헤드를 줄이고 성능을 향상시킬 수 있습니다.
인라인 함수를 작성할 때 주의해야 할 점은, 함수 내부에 대한 정의를 헤더 파일에 작성하여 매크로로 사용되는 경우입니다. 매크로는 텍스트 치환을 통해 동작하며, 인라인 함수로 만드는 것은 불가능합니다. 이러한 경우에 extern inline 키워드를 사용하여 인라인 함수를 정의할 수 있습니다. extern inline 키워드는 컴파일러에게 인라인 함수 정의를 무시하고, 함수의 외부 정의를 찾도록 지시합니다. 외부 정의를 찾으려면 해당 함수를 다른 소스 파일에 정의해야 합니다.
extern inline 함수를 사용하면 컴파일러에게 인라인 함수를 컴파일 단위에서만 처리하는 것을 요청할 수 있습니다. 이렇게 함으로써 매크로로 사용되는 인라인 함수에 대한 외부 정의를 얻을 수 있습니다. 이는 코드의 중복을 피하고 실제 함수 정의를 헤더 파일에 작성할 수 있는 이점을 제공합니다. 또한 extern inline은 기존 코드와의 호환성을 유지하는 데 도움을 줄 수 있습니다.
한 가지 강조해야 할 점은 작성한 함수가 실제로 인라인 되는지 여부는 컴파일러가 결정한다는 것입니다. 컴파일러는 inline 함수를 일반 함수로 해석할 수도 있습니다. 적절한 컴파일러 힌트를 사용하여 컴파일러가 인라인하지 않도록 할 수도 있습니다.
extern inline는 C 프로그래밍에서 많은 유용성을 제공하는 키워드입니다. 적절한 사용으로 성능 향상과 코드 가독성을 동시에 얻을 수 있습니다. 이를 활용하여 효율적이고 유지 관리하기 쉬운 코드를 작성하는 것이 중요합니다.

반응형
Comments