지시문 포함

Include directive

많은 프로그래밍 언어 및 기타 컴퓨터 파일에는 지정된 파일의 내용을 원래 파일에 삽입하는 명령어(또는 )가 있습니다.이러한 파일을 카피북 또는 헤더 파일이라고 합니다.1000개 이상의 라이브러리 파일이 있으며 캡슐화와 코드 또는 데이터의 재사용을 촉진하면서 프로그램 데이터, 프로시저 코드 조각 및/또는 포워드 선언의 물리적 레이아웃을 정의하는 데 자주 사용됩니다.

헤더 파일

컴퓨터 프로그래밍에서 헤더 파일은 프로그래머가 프로그램의 소스 코드의 특정 요소를 재사용 가능한 파일로 분리할 수 있는 파일입니다.헤더 파일에는 일반적으로 클래스, 서브루틴, 변수 및 기타 식별자전달 선언이 포함됩니다.하나 이상의 소스 파일에서 표준화된 식별자를 선언하고자 하는 프로그래머는 이러한 식별자를 단일 헤더 파일에 배치할 수 있으며, 헤더 내용이 필요할 때마다 다른 코드가 이를 포함할 수 있습니다.이는 헤더 내의 인터페이스를 구현과 분리하기 위한 것입니다.[1]

C 표준 라이브러리와 C++ 표준 라이브러리는 전통적으로 헤더 파일에서 표준 함수를 선언합니다.

최근에 컴파일된 일부 언어(Java, C# )에서는 포워드 선언을 사용하지 않습니다.식별자는 소스 파일에서 자동으로 인식되며 동적 라이브러리 기호에서 직접 읽힙니다.이는 헤더 파일이 필요하지 않음을 의미합니다.

목적

이 지령을 통해 코드 라이브러리를 개발하여 다음을 수행할 수 있습니다.

  • 프로그램 전체에서 모든 사람이 동일한 버전의 데이터 레이아웃 정의 또는 절차 코드를 사용하는지 확인합니다.
  • 시스템에서 구성 요소가 사용되는 위치를 쉽게 상호 참조할 수 있습니다.
  • 필요에 따라 프로그램을 쉽게 변경할 수 있습니다(하나의 파일만 편집해야 함).
  • 데이터 레이아웃을 재사용하여 시간을 절약합니다.

include 디렉티브를 사용하면 도움이 되는 상황의 예로는 다른 파일의 함수를 참조할 수 있습니다.예를 들어 함수를 포함하는 C 소스 파일이 있다고 가정합니다.add이것은 다음과 같이 외부 존재와 유형(함수 프로토타입 포함)을 선언함으로써 두 번째 파일에서 참조됩니다.

인트 더하다(인트, 인트);  인트 삼중의(인트 x) {     돌아가다 더하다(x, 더하다(x, x)); } 

이 접근법의 한 가지 단점은 함수를 사용하는 모든 파일에 함수 프로토타입이 있어야 한다는 것입니다.또 다른 단점은 함수의 반환 유형이나 인수가 변경될 경우 이러한 모든 프로토타입을 업데이트해야 한다는 것입니다.프로토타입을 하나의 개별 파일에 저장하면 이러한 문제를 방지할 수 있습니다.프로토타입을 파일로 이동했다고 가정합니다.add.h두 번째 소스 파일은 다음과 같습니다.

#실패하다 "add.h"  인트 삼중의(인트 x) {     돌아가다 더하다(x, 더하다(x,x)); } 

코드가 컴파일될 때마다 최신 기능 프로토타입이add.h파일을 사용하는 파일에 포함되어 잠재적인 오류를 방지합니다.

언어 지원

C/C++

C 및 C++ 프로그래밍 언어에서는#include preprocessor 디렉티브를 사용하면 컴파일러는 이 행을 이름 있는 소스 파일(따옴표: "에 포함되는 경우) 또는 이름 있는 헤더(각 괄호:<>[2]에 포함되는 경우)의 전체 텍스트로 치환합니다.헤더가 소스 [3]파일일 필요는 없습니다.포함은 이러한 포함된 콘텐츠에 대해 구현 정의 중첩 제한까지 반복적으로 계속됩니다.헤더에는 파일에 대응하는 이름이 필요 없습니다.C++ 의 표준 헤더는, 통상은 「벡터」등의 단어로 식별됩니다.#include <vector>C에서는 표준 헤더에 .h 확장자가 붙은 파일명 형식의 식별자가 있습니다.#include <stdio.h>. "source file"은 어떤 형식의 파일이라도 상관없습니다.단, 확장자가 .c, .cc, .cpp인 파일도 포함되지만, 확장자가 ".h"이고 확장자가 ".hpp" 또는 ".hhh"인 파일(C+++ 헤더를 구별하기 위해 ".hhh"라고도 합니다), 확장자가 있는 파일(특히 단일 컴파일 기술에 포함되기도 합니다).e 사용.

이 두 가지 형태의#include디렉티브는 구현 정의 방식으로 포함할 헤더 또는 소스 파일을 결정할 수 있습니다.실제로 일반적으로 angle-brackets 폼은 표준 시스템디렉토리(또는 디렉토리 세트)에서 소스 파일을 검색한 후 로컬 또는 프로젝트 고유의 경로(명령줄, 환경변수, Makefile 또는 기타 빌드 파일)에서 소스 파일을 검색하지만 따옴표가 있는 폼은 검색합니다.표준 시스템 디렉토리에서 검색하지 않고 로컬 경로 또는 프로젝트별 [4]경로에서만 검색합니다.충돌이 없는 경우 각도 브래킷 양식을 사용하여 프로젝트별 포함을 지정할 수도 있지만 이는 잘못된 형식으로 간주됩니다.헤더가 파일에 대응하지 않아도 되는 것은 주로 구현 기술이며, C++ 표준 헤더를 포함할 때 .h 확장자를 생략하기 위해 사용됩니다.일반적으로 "header"는 "header file"을 의미합니다.

예를 들어 다음과 같습니다.

#실패하다 <stdio.h>// 표준 헤더 'stdio'의 내용을 포함합니다.h' (파일 'stdio'를 지정합니다).h') #실패하다 <blocks>// 표준 헤더 '벡터'(아마 파일 '벡터')의 내용을 포함합니다.h') #실패하다 "user_defined.h"// 'user_defined' 파일의 내용을 포함합니다.h'입니다. 

C 및 C++ 에서는, 2개(또는 그 이상)의 인크루드 파일에 같은 3번째 파일이 포함되어 있는 경우, 문제에 직면할 가능성이 있습니다.한 가지 해결책은 파일이 다른 파일을 포함하지 않도록 하는 것입니다.프로그래머가 수동으로 원래의 파일에 include 디렉티브를 추가할 필요가 있을 수 있습니다.또 다른 해결책은 인크루드 [5]가드를 사용하는 것입니다.

코볼

COBOL(및 RPG IV)은 프로그래머가 헤더 파일과 유사한 방식으로 복사북을 프로그램의 소스로 복사할 수 있게 하지만, 또한 그것들의 특정 텍스트를 다른 텍스트로 대체할 수 있게 한다.포함하기 위한 COBOL 키워드는 다음과 같습니다.COPY교환은, 를 사용해 행해집니다.REPLACING ... BY ...절을 클릭합니다.포함 디렉티브는 COBOL 60부터 COBOL에 존재해 왔지만, 원래의 디렉티브에서 변경되었습니다.INCLUDE[6]COPY1968년까지.[7]

포트란

Fortran은 헤더 파일 자체가 필요하지 않습니다.그러나 Fortran 90 이상에는 다음과 같은 두 가지 관련 기능이 있습니다.include스테이트먼트와 모듈.전자는 C 헤더와 같이 프로시저 인터페이스를 포함하는 공통 파일을 공유하기 위해 사용할 수 있지만, 모든 종류의 Fortran 프로시저에 인터페이스 사양이 필요한 것은 아닙니다.이 접근방식은 일반적으로 사용되지 않습니다.대신 순서는 일반적으로 모듈로 그룹화되어 있습니다.이 모듈에서는 다음에 참조할 수 있습니다.use코드의 다른 영역에 있는 스테이트먼트.모듈의 경우 헤더 타입의 인터페이스 정보는 컴파일러에 의해 자동으로 생성되며 일반적으로 개별 모듈 파일에 저장됩니다.단, 일부 컴파일러는 이 정보를 오브젝트 파일에 직접 배치하고 있습니다.모듈 프로시저 인터페이스가 거의 보편적으로 전파되는 경우에도 언어 사양 자체는 추가 파일 작성을 요구하지 않습니다.

파스칼

대부분의 Pascal 컴파일러는$i또는$include컴파일러 디렉티브, 여기서$i또는$include명령어는 코멘트 블록의 시작 직후에 다음과 같은 형태로 표시됩니다.

  • {$i filename.pas}
  • (*$I filename.inc*)
  • {$include filename.inc}
  • (*INCLUDE filename.pas*)

어디서?$i또는$include 디렉티브는 대소문자를 구분하지 않으며 filename.pas 또는 filename입니다.inc는 포함할 파일의 이름입니다.(Pascal의 include 파일에 확장자.inc를 붙이는 것이 일반적이지만 필수는 아닙니다.)일부 컴파일러는 크록 재귀 방지를 위해 인크루드 파일을 호출하는 것을 특정 수로 제한하거나 자기 자신 또는 현재 열려 있는 파일을 호출하지 못하도록 제한하거나 한 번에 최대 1개의 인크루드 파일로 제한합니다(예: 인크루드 파일에는 자신이나 다른 파일을 포함할 수 없습니다).그러나 다른 파일이 포함된 프로그램에는 한 번에 하나씩 여러 개의 파일이 포함될 수 있습니다.

PHP

PHP에서는include디렉티브를 지정하면 다른 PHP 파일이 포함되어 [8]평가됩니다.유사한 명령어는 다음과 같습니다.require를 포함하지 않으면 치명적인 예외가 발생하고 스크립트가 [9]정지됩니다.include_once그리고.require_once따라서 파일이 이미 포함되었거나 필요한 경우 파일이 포함되거나 다시 필요하지 않으므로 C의 이중 포함 문제를 방지할 수 있습니다.

기타 언어

include 디렉티브에는 다음과 같은 다양한 형식이 있습니다.

현대 언어(예: HaskellJava)는 네임스페이스 제어를 위해 카피북 또는 포함을 피하고 모듈을 선호하며 시스템을 Import/export하는 경향이 있습니다.이러한 언어 중 일부(Java 및 C# 등)는 순방향 선언을 사용하지 않고 소스 파일에서 식별자가 자동으로 인식되어 동적 라이브러리 기호(일반적으로 에서 참조)에서 직접 읽힙니다.import또는usingdirectives)는 헤더 파일이 필요하지 않음을 의미합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Alan Griffiths (2005). "Separating Interface and Implementation in C++". ACCU. Retrieved 2013-05-07.
  2. ^ C11 표준, 6.10.2 소스 파일 포함, 페이지 164–165
  3. ^ C11 표준, 7.1.2 표준 헤더, 페이지 181, 각주 182: "헤더는 반드시 소스 파일이 아니며,<그리고.>헤더 이름으로 구분된 시퀀스는 반드시 유효한 소스 파일 이름이어야 합니다.
  4. ^ Stallman, Richard M. (July 1992). "The C Preprocessor" (PDF). Archived from the original (PDF) on 4 September 2012. Retrieved 19 February 2014.
  5. ^ Pike, Rob (21 Feb 1989), Notes on programming in C, Cat-v document archive, retrieved 9 Dec 2011
  6. ^ "COBOL Initial Specifications for a COmmon Business Oriented Language" (PDF). Department of Defense. April 1960. p. IX-9. Archived from the original (PDF) on 12 February 2014. Retrieved 11 February 2014.
  7. ^ "The COPY Statement". CODASYL COBOL Journal of Development 1968. July 1969. LCCN 73601243.
  8. ^ "include". php.net. The PHP Group. Retrieved 20 February 2014.
  9. ^ "require". php.net. The PHP Group. Retrieved 20 February 2014.

외부 링크