C include 차이 - C include chai

반응형

[C/C++] #include에서 " " 와 < > 의 차이점 및 헤더 파일 경로변경 방법

C include 차이 - C include chai

 

1. (시스템 헤더) #include < > 

 

 

- '< >' Visual Studio 및 Windows에서 기본제공하는 시스템 헤더를 include하는데 사용한다. 

 

- Windows 시스템 헤더의 매크로는 $(windowsSDK_IncludePath) 이다.

  (경로 : C:\Program Files (x86)\Windows Kits\10\Include)

  * 참고로 stdio.h 헤더파일은 해당 경로에 저장되어 있다.

    (C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt)

 

- Visual Studio 시스템 헤더의 매크로는 $(VC_IncludePath)이다.

  (경로 : C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC)

 

- '구성 속성 - VC++ 디렉터리 - 포함 디렉터리'에 디폴트로 시스템 헤더 경로가 저장되어있다.

 

C include 차이 - C include chai

 


 

※ 디렉터리에 저장된 시스템 경로를 실수로 지웠다면? (<stdio.h> 헤더 인식 불가)

 

아래와 같이 포함 디렉터리(또는 다른 디폴트 디렉터리들) 경로를 실수로 지워버렸다면 <stdio.h>가 인식이 안될 것이다.

 

C include 차이 - C include chai
실수로 시스템 헤더 경로 삭제

 

C include 차이 - C include chai
<stdio.h> 시스템 헤더 인식 불가

 

이런 경우 '포함 디렉터리 우측에 V 체크박스 클릭 - <부모 또는 프로젝트 기본값에서 상속> 버튼 클릭 - 적용'을 누르면 디폴트 설정값으로 이동한다.

 

C include 차이 - C include chai

 

 

C include 차이 - C include chai
다시 <stdio.h> 헤더를 올바르게 인식한다.

 


 

2. (유저 헤더) #include " " 

 

 

- " "는 유저가 만든 헤더를 include하는데 사용한다.

 

- " "가 기본적으로 가리키는 위치는 유저가 생성한 프로젝터 폴더이다.

 

- 불러오는 위치의 매크로는 $(ProjectDir)이다.

 

 예) 아래와 같이 A 프로젝트를 생성 후 A\test.h를, A\header\test2.h 헤더파일을 각각 생성했다.

 

C include 차이 - C include chai

 

C include 차이 - C include chai

 

 

아래와 같이 #inlcude " "가 기본적으로 가리키는 위치는 새로 생성한 A 프로젝트 폴더이다.

하지만 A\header 폴더 하위에 생성된 test2.h 파일은 인식을 못하고 있다. 이럴 경우, 헤더파일의 폴더를 추가해줘야 한다.

C include 차이 - C include chai

 


※ " "가 가리키는 헤더파일 경로를 추가하는 방법

 

1) '프로젝트-속성' 또는 'Alt+F7' 입력

2) '구성 속성 - VC++ 디렉터리 - 포함 디렉터리'에서 ; 후 경로 입력 - 적용 - 확인

  예) '$(IncludePath);$(ProjectDir)/header' 입력(매크로입력) 또는

      '$(IncludePath);C:\Users\PC\source\repos\A\header' 입력(절대경로입력)

  * 기존에 저장되어있는 경로 수정 또는 삭제 금지. 헤더파일을 못읽을 수 있음.

  * 경로는 \(달러)도 입력가능하고, /(슬래시)도 입력 가능하다.

  

 

C include 차이 - C include chai

 

헤더 경로를 추가 후 test2.h 헤더파일도 정상적으로 인식한다.

 

C include 차이 - C include chai

 

* 참고로, ""(유저헤더)가 <>(시스템헤더)보다 인식 범위가 넓다.

 

 즉, ""안에 들어가는 헤더파일을 <>(시스템헤더)의 경로에서 먼저 검색하고 없으면 유저헤더 경로에서 검색한다.

 (그래도 없으면 에러를 띄운다.)

 이 같은 원리로 시스템 헤더인 stdio.h를 include할 때 #include <stdio.h>가 아닌,

 #include "stdio.h"로 입력하여도 에러가 나지 않는다.

 

C include 차이 - C include chai
시스템헤더는 ""로도 사용이 가능함.

 

* 단 시스템헤더와 유저헤더 구분을 식별하기 위하여 <>와 ""를 구별하여 쓰는 것을 권장한다.


 

추가) 매크로가 지시하는 경로가 어디인지 알고 싶을 경우, 

 

  1) 디렉터리 우측에 'V 체크박스' 클릭 - '편집' 클릭

  2) 우측 하단에 '매크로' 클릭

  3) 검색

 

C include 차이 - C include chai

반응형

공유하기

게시글 관리

구독하기Half Moon

'IT > C C++' 카테고리의 다른 글

[C/C++] #pragma once 의미  (0)2021.03.18[C/C++]동적할당 malloc, calloc 차이점!!  (0)2021.03.17[C/C++] #if, #ifdef, #elif 등등  (0)2021.03.17[C/C++] Visual Studio 유용한 기능 및 단축키 + 비디오로 저장  (0)2021.02.22[C/C++] 마우스 매크로 만들기  (0)2021.02.22