C ++ 포함 및 가져 오기 차이점


답변:


61

#import 분명히 COM 또는 .NET에만 해당되는 Microsoft 고유의 것입니다.

#include 소스 코드 파일에 헤더 (또는 때때로 다른 소스 코드) 파일을 포함하는 데 사용되는 표준 C / C ++ 전 처리기 문입니다.


6
이것은 사실이 아닙니다. # import에 지시어는 공식적으로 버전 3.4에서 gcc를 팀에 의해 undeprecated하고있는 지원 GCC의 모든 이전 버전에서 잘에게 시간의 99 %를 작동했다
브라이언 R. 본디

6
... #import를 지원합니다
Brian R. Bondy

1
궁금해서 몰랐습니다. 아마도 COM 및 .NET 전용이라고 말해야 할 것입니다.
Head Geek

24
gcc에서 지원하는 #import는 헤더를 한 번만 포함하는 이식 불가능한 방법입니다 : <a href=" gcc.gnu.org/onlinedocs/gcc-4.3.2/cpp/…> . Microsoft COM #과는 완전히 관련이 없습니다. import.
fizzer

3
GCC #import는 실제로 gcc 및 clang의 .c 파일과 함께 작동하는 Objective-C 전 처리기 명령입니다 (현상 모드 제외).
마이클 모리스

83

VC ++로 가져 오기 : #import 형식 라이브러리 또는 .tlbs (COM 항목) 용입니다.

형식 라이브러리의 내용은 대부분 자동으로 COM 인터페이스를 설명하는 C ++ 클래스로 변환 된 다음 파일에 포함됩니다.

#import지시문은 Microsoft에서 C ++ 언어의 확장으로 도입했습니다. 이 MSDN 문서 에서 이에 대해 읽을 수 있습니다 .

#import지시문은 .NET / CLI 항목에서도 사용됩니다.

gcc로 가져 오기 : gcc로 가져 오기는 VC ++로 가져 오기와 다릅니다. 헤더를 최대 한 번만 포함하는 간단한 방법입니다. (VC ++ 및 GCC에서는 #pragma한 번만 수행 할 수 있습니다.)

#import지시문은 버전 3.4에서 gcc 팀에 의해 공식적으로 폐기되었으며 지원하는 모든 이전 버전의 gcc에서 99 %의 시간 동안 잘 작동합니다.

포함 : #include 대부분 헤더 파일 용이지만 현재 파일 앞에 내용을 추가합니다. #includeC ++ 표준의 일부입니다. 이 MSDN 문서 에서 이에 대해 읽을 수 있습니다 .


3
MSDN 링크가 오래되었습니다. 감사합니다 Microsoft.
Mark Ransom 2018

8

#import전반적으로 평소에 대한 해결책입니다.

#ifndef ...
#define ...
#include ...
#endif

해결 방법. #import이전에 포함되지 않은 경우에만 파일을 포함합니다.

Apple의 Objective-C도 #import명령문 을 사용한다는 점은 주목할 가치가 있습니다 .


4

import 는 또한 2006 년 9 월 Daveed Vandevoorde가 언어위원회에 제안한 n2073, Modules in C ++ 와 관련된 키워드 중 하나였습니다 . 그 제안이 확실히 보류되었는지 또는 구현을 기다리고 있는지 알기에는 언어 괴짜가 아닙니다. (개념 증명) 저자 또는 다른 사람으로부터 ...


Daveed는 당시 EDG 직원 이었기 때문에 그들이 그렇게 작동하는 코드를 가질 것이라고 기대했습니다.
MSalters

1
'#include'에서 가져 오기 메커니즘으로 이동하는 것이 매우 좋을 것이기 때문에 그들이 필요한 작업을 완료했으면합니다. 하지만이 기능에 대해 조금도 들어 본 적이 없으며 C ++ 0X에 포함되어 있지 않다고 확신합니다. 내가 은퇴하기 전에 언젠가; ^) ~
Don Wakefield

1
내가 두려워했던 것처럼 몇 년이 지나야한다 : C ++ 09의 모듈?
Don Wakefield

4

GCC 4.1,주의하시기 바랍니다 #import 있다 되지 않습니다. 사용하면 다음과 같은 경고가 표시됩니다.

#import 더 이상 사용되지 않는 GCC 확장입니다.


이것은 질문에 대한 답이 아닙니다.
SS Anne
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.