Source file inclusion
현재 소스 파일의 지시문 바로 다음 줄에 다른 소스 파일을 포함합니다.
목차 |
구문
#include <
h-char-sequence
>
new-line
|
(1) | ||||||||
#include "
q-char-sequence
"
new-line
|
(2) | ||||||||
#include
pp-tokens
new-line
|
(3) | ||||||||
__has_include
(
"
q-char-sequence
"
)
__has_include
(
<
h-char-sequence
>
)
|
(4) | (C23부터) | |||||||
__has_include
(
string-literal
)
__has_include
(
<
h-pp-tokens
>
)
|
(5) | (C23부터) | |||||||
| new-line | - | 개행 문자 |
| h-char-sequence | - |
하나 이상의
h-char
시퀀스로, 다음 중 어느 하나가 나타나면 미정의 동작을 유발함:
|
| h-char | - | 소스 문자 집합 의 구성원 중 개행 문자와 > 를 제외한 모든 문자 |
| q-char-sequence | - |
하나 이상의
q-char
시퀀스로, 다음 중 어느 하나가 나타나면 미정의 동작을 유발함:
|
| q-char | - | 소스 문자 집합 의 구성원 중 개행 문자와 " 를 제외한 모든 문자 |
| pp-tokens | - | 하나 이상의 전처리 토큰 시퀀스 |
| string-literal | - | 문자열 리터럴 |
| h-pp-tokens | - | 전처리 토큰 중 > 를 제외한 하나 이상의 시퀀스 |
설명
include
이후의 전처리 토큰들은 일반 텍스트에서와 동일하게 처리됩니다(즉, 현재 매크로 이름으로 정의된 각 식별자는 해당 전처리 토큰들의 대체 목록으로 교체됩니다). 모든 대체 후 생성되는 지시문은 앞서 설명한 두 가지 형식 중 하나와 일치해야 합니다.
<
와
>
전처리 토큰 쌍 사이의 전처리 토큰 시퀀스 또는 한 쌍의
"
문자 사이의 시퀀스가 단일 헤더 이름 전처리 토큰으로 결합되는 방법은 구현에 따라 정의됩니다.
__has_include
표현식은 소스 파일 검색이 성공하면
1
로 평가되고, 검색이 실패하면
0
로 평가됩니다.
파일을 찾을 수 없는 경우, 프로그램은 형식이 잘못되었습니다.
|
|
(C23부터) |
참고 사항
일반적인 구현에서는 구문 (1)에 대해 표준 포함 디렉토리만 검색합니다. 표준 C 라이브러리는 이러한 표준 포함 디렉토리에 암묵적으로 포함됩니다. 표준 포함 디렉토리는 일반적으로 사용자가 컴파일러 옵션을 통해 제어할 수 있습니다.
구문 (2) 의 의도는 구현에 의해 제어되지 않는 파일들을 검색하는 것입니다. 일반적인 구현들은 현재 파일이 위치한 디렉토리를 먼저 검색한 후 (1) 으로 폴백(fallback)합니다.
파일이 포함될 때, 그것은
번역 단계
1-4에 의해 처리되며, 여기에는 구현체 정의 중첩 한계까지 재귀적으로 중첩된
#include
지시문의 확장이 포함될 수 있습니다. 동일한 파일의 반복적 포함과 파일이 자신을 (아마도 전이적으로) 포함할 때의 무한 재귀를 방지하기 위해,
헤더 가드
가 일반적으로 사용됩니다: 전체 헤더는 다음과 같이 감싸집니다
#ifndef FOO_H_INCLUDED /* 파일 이름에 고유하게 매핑된 임의의 이름 */ #define FOO_H_INCLUDED // 파일 내용이 여기에 위치합니다 #endif
많은 컴파일러는 비표준 pragma #pragma once 도 유사한 효과로 구현합니다: 동일한 파일(파일 식별은 OS별 방식으로 결정됨)이 이미 포함된 경우 파일 처리를 비활성화합니다.
__has_include
의 결과가
1
인 것은 지정된 이름을 가진 헤더나 소스 파일이 존재한다는 의미만을 가집니다. 이는 해당 헤더나 소스 파일이 포함될 때 오류를 발생시키지 않거나 유용한 내용을 포함할 것임을 보장하지 않습니다.
예제
|
이 섹션은 불완전합니다
이유: 예제가 없음 |
참고문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 6.4.7 헤더 이름 (p: 69)
-
- 6.10.1 조건부 포함 (p: 165-169)
-
- 6.10.2 소스 파일 포함 (p: 169-170)
- C17 표준 (ISO/IEC 9899:2018):
-
- 6.10.2 소스 파일 포함 (p: 119-120)
- C11 표준 (ISO/IEC 9899:2011):
-
- 6.10.2 소스 파일 포함 (p: 164-166)
- C99 표준 (ISO/IEC 9899:1999):
-
- 6.10.2 소스 파일 포함 (p: 149-151)
- C89/C90 표준 (ISO/IEC 9899:1990):
-
- 3.8.2 소스 파일 포함
참고 항목
| C 표준 라이브러리 헤더 파일 목록 | |
|
C++ 문서
for
Source file inclusion
|