200

가능한 중복 :

#include < filename > #include "filename"?

꺾쇠 괄호 사이의 차이점은 무엇입니까?< >큰 따옴표" "C ++에서 헤더 파일을 포함하는 동안?

나는 어떤 파일들이 예를 들어 포함되어 있어야한다고 생각한다 :#include <QPushButton>그리고 어떤 파일들이 포함될 것인가? 예 :#include "MyFile.h"???


  • 이것은stackoverflow.com/questions/21593/…, 비록 그 중 하나의 대답은 틀렸지 만 (전처리 기가 검색하는 위치와 관련이 있지만, 스펙은 그 위치를 정의하지 않습니다 - 현재 디렉토리는 필수 조건이 아니라 관습입니다). - Nick Bastin

2 답변


221

그것은 컴파일러에 의존합니다. 즉, 일반적으로"시스템 헤더를 통해 현재 작업 디렉토리의 헤더에 우선 순위를 지정합니다.<>일반적으로 시스템 헤더에 사용됩니다. 시작하기 (6.10.2 절) :

양식의 전처리 지시문

  #include <h-char-sequence> new-line

지정된 순서에 따라 고유하게 식별 된 헤더에 대해 구현 정의 된 장소의 시퀀스를 검색합니다.<>구분 기호를 사용하고 해당 지시문을 헤더의 전체 내용으로 대체합니다. 장소가 지정되는 방법 또는 식별 된 헤더가 구현 정의되는 방법.

양식의 전처리 지시문

  #include "q-char-sequence" new-line

그 지시어가 지정된 순서에 의해 식별 된 소스 파일의 전체 내용에 의해 해당 지시어를"구분 기호. 명명 된 소스 파일은 구현 정의 방식으로 검색됩니다. 이 검색이 지원되지 않거나 검색에 실패하면 지시문을 읽은 것처럼 다시 처리합니다

  #include <h-char-sequence> new-line

동일한 포함 된 서열 (>문자) (있는 경우)   지령.

가장컴파일러""먼저 로컬 디렉토리를 검사하고 일치하지 않으면 시스템 경로를 검사합니다. 사용<>시스템 헤더로 검색을 시작합니다.


  • " 현재 작업 디렉토리 " 란 무엇을 의미합니까? AFAIK는 이러한 지시문을 사용하는 파일이있는 디렉토리에 우선 순위를 부여합니다. - Craig Wright
  • @ 크레이그, 맞아. 맞아. 나는 내가 의미했던 것과 다른 것을 썼다. 내가 현재 노력해 왔던 빌드 시스템의 부작용은 둘이 항상 동일하다는 것이다. - Carl Norum
  • +1 사양을 인용하십시오. 이것은 당신의 대답을 더 검증 할 수있게합니다. - charmoniumQ
  • 그것은 C ++에서와 같은 개념입니다. 올바른 +1. - Jayprakash Dubey
  • Microsoft 구현은 < > 익숙한 - Peter K

41

꺾쇠 괄호를 사용하면 컴파일러는 포함 경로 목록에서 파일을 검색합니다. 큰 따옴표를 사용하면 먼저 현재 디렉토리 (즉, 컴파일중인 모듈이있는 디렉토리)를 검색 한 다음 include 경로 목록을 검색합니다.

따라서 규칙에 따라 표준 포함에 꺾쇠 괄호를 사용하고 다른 모든 것에 대해서는 큰 따옴표를 사용합니다. 이렇게하면 표준 헤더와 이름이 같은 로컬 헤더가있는 (권장되지 않음) 경우 올바른 경우가 선택됩니다.

연결된 질문


관련된 질문

최근 질문