변환 단계Phases of Translation

C 및 C++ 프로그램은 각각 일부 프로그램의 텍스트를 포함하는 하나 이상의 소스 파일로 구성됩니다.C and C++ programs consist of one or more source files, each of which contains some of the text of the program. #include와 같은 조건부 컴파일에서 제거된 코드 섹션을 제외하고 include 파일(#if 전처리기 지시문을 사용하여 포함된 파일)을 포함하는 소스 파일을 "변환 단위"라고 합니다.A source file, together with its include files (files that are included using the #include preprocessor directive) but not including sections of code removed by conditional-compilation directives such as #if, is called a "translation unit."

소스 파일은 다른 표준 시간대에 변환될 수 있습니다. 일반적으로 오래된 파일만 변환합니다.Source files can be translated at different times — in fact, it is common to translate only out-of-date files. 변환된 변환 단위는 별도의 개체 파일 또는 개체 코드 라이브러리에서 처리될 수 있습니다.The translated translation units can be processed into separate object files or object-code libraries. 이러한 별도 변환된 변환 단위는 실행할 수 있는 프로그램 또는 동적 연결 라이브러리(DLL)의 형태로 연결됩니다.These separate, translated translation units are then linked to form an executable program or a dynamic-link library (DLL). 링커 입력으로 사용할 수 있는 파일에 대 한 자세한 내용은 참조 링크 입력 파일합니다.For more information about files that can be used as input to the linker, see LINK Input Files.

변환 단위는 다음을 사용하여 통신할 수 있습니다.Translation units can communicate using:

  • 외부 링크가 있는 함수를 호출합니다.Calls to functions that have external linkage.

  • 외부 링크가 있는 클래스 멤버 함수를 호출합니다.Calls to class member functions that have external linkage.

  • 외부 링크가 있는 개체를 직접 수정합니다.Direct modification of objects that have external linkage.

  • 파일을 직접 수정합니다.Direct modification of files.

  • 프로세스 간에 통신합니다(Microsoft Windows 기반 응용 프로그램만).Interprocess communication (for Microsoft Windows-based applications only).

    다음 목록은 컴파일러가 파일을 변환하는 단계를 나타냅니다.The following list describes the phases in which the compiler translates files:

    문자 매핑Character mapping
    소스 파일 내의 문자는 내부 소스 표현과 매핑됩니다.Characters in the source file are mapped to the internal source representation. 삼중자 시퀀스는 이 단계에서 단일 문자 내부 표현으로 변환됩니다.Trigraph sequences are converted to single-character internal representation in this phase.

    줄 결합Line splicing
    백슬래시는 모든 줄 (\) 바로 뒤에 야 줄 바꿈으로 문자는 실제 줄에서 논리적 줄을 형성 하는 소스 파일에서 다음 줄과 연결 됩니다.All lines ending in a backslash (\) and immediately followed by a newline character are joined with the next line in the source file forming logical lines from the physical lines. 비어 있지 않은 경우 소스 파일은 백슬래시가 앞에 나오지 않는 줄 바꿈 문자에서 끝나야 합니다.Unless it is empty, a source file must end in a newline character that is not preceded by a backslash.

    토큰화Tokenization
    소스 파일은 전처리 토큰 및 공백 문자로 나뉩니다.The source file is broken into preprocessing tokens and white-space characters. 소스 파일의 설명은 하나의 공백 문자로 각각 대체됩니다.Comments in the source file are replaced with one space character each. 줄 바꿈 문자는 그대로 유지됩니다.Newline characters are retained.

    전처리Preprocessing
    전처리 지시문이 실행되고 매크로는 소스 파일에 확장됩니다.Preprocessing directives are executed and macros are expanded into the source file. #include 문은 포함된 모든 텍스트에서 이전 세 가지 변환 단계로 시작하는 변환을 호출합니다.The #include statement invokes translation starting with the preceding three translation steps on any included text.

    문자 집합 매핑Character-set mapping
    모든 문자 집합 멤버와 이스케이프 시퀀스는 실행 문자 집합에서 동등하게 변환됩니다.All source character set members and escape sequences are converted to their equivalents in the execution character set. Microsoft C 및 C++의 경우 소스 및 실행 문자 집합 모두 ASCII입니다.For Microsoft C and C++, both the source and the execution character sets are ASCII.

    문자열 연결String concatenation
    모든 인접 문자열과 와이드 문자열 리터럴은 연결되어 있습니다.All adjacent string and wide-string literals are concatenated. 예를 들어, "String " "concatenation""String concatenation"이 됩니다.For example, "String " "concatenation" becomes "String concatenation".

    번역Translation
    모든 토큰은 구문적 그리고 의미적으로 분석됩니다. 이러한 토큰은 개체 코드로 변환됩니다.All tokens are analyzed syntactically and semantically; these tokens are converted into object code.

    링크Linkage
    모든 외부 참조는 실행 프로그램 또는 동적 연결 라이브러리를 만들기 위해 확인됩니다.All external references are resolved to create an executable program or a dynamic-link library.

    컴파일러에서 구문 오류가 발생하는 변환 단계 중 경고 또는 오류가 발생합니다.The compiler issues warnings or errors during phases of translation in which it encounters syntax errors.

    링커는 모든 외부 참조를 확인하고 표준 라이브러리에 따라 하나 이상의 별도 처리되는 변환 단위를 결합하여 DLL 또는 실행 프로그램을 만듭니다.The linker resolves all external references and creates an executable program or DLL by combining one or more separately processed translation units along with standard libraries.

참고 항목See Also

전처리기Preprocessor