변환 단계
C 및 C++ 프로그램은 각각 일부 프로그램의 텍스트를 포함하는 하나 이상의 소스 파일로 구성됩니다. 소스 파일은 포함 파일과 함께 전처리기 지시문을 사용 #include
하지만 조건부 컴파일 지시#if
문에 의해 제거된 코드 섹션을 포함하지 않는 파일을 번역 단위라고 합니다.
원본 파일은 다른 시간에 번역할 수 있습니다. 실제로 오래된 파일만 번역하는 것이 일반적입니다. 변환된 변환 단위는 별도의 개체 파일 또는 개체 코드 라이브러리에서 처리될 수 있습니다. 이러한 별도 변환된 변환 단위는 실행할 수 있는 프로그램 또는 동적 연결 라이브러리(DLL)의 형태로 연결됩니다. 링커에 대한 입력으로 사용할 수 있는 파일에 대한 자세한 내용은 LINK 입력 파일을 참조하세요.
변환 단위는 다음을 사용하여 통신할 수 있습니다.
외부 링크가 있는 함수를 호출합니다.
외부 링크가 있는 클래스 멤버 함수를 호출합니다.
외부 링크가 있는 개체를 직접 수정합니다.
파일을 직접 수정합니다.
프로세스 간에 통신합니다(Microsoft Windows 기반 애플리케이션만).
다음 목록은 컴파일러가 파일을 변환하는 단계를 나타냅니다.
문자 매핑
소스 파일 내의 문자는 내부 소스 표현과 매핑됩니다. 삼중자 시퀀스는 이 단계에서 단일 문자 내부 표현으로 변환됩니다.
줄 접미사
줄 바꿈 문자 바로 뒤에 백슬래시(\)로 끝나는 모든 줄은 원본 파일의 다음 줄과 조인되어 실제 줄에서 논리적 줄을 형성합니다. 비어 있지 않으면 원본 파일은 백슬래시 앞에 없는 줄바꿈 문자로 끝나야 합니다.
토큰화
소스 파일은 전처리 토큰 및 공백 문자로 나뉩니다. 소스 파일의 설명은 하나의 공백 문자로 각각 대체됩니다. 줄 바꿈 문자는 그대로 유지됩니다.
전처리
전처리 지시문이 실행되고 매크로는 소스 파일에 확장됩니다. #include
문은 포함된 모든 텍스트에서 이전 세 가지 변환 단계로 시작하는 변환을 호출합니다.
문자 집합 매핑
모든 문자 집합 멤버와 이스케이프 시퀀스는 실행 문자 집합에서 동등하게 변환됩니다. Microsoft C 및 C++의 경우 소스 및 실행 문자 집합 모두 ASCII입니다.
문자열 연결
모든 인접 문자열과 와이드 문자열 리터럴은 연결되어 있습니다. 예를 들어 "String " "concatenation"
은 "String concatenation"
이 됩니다.
번역
모든 토큰은 구문적 그리고 의미적으로 분석됩니다. 이러한 토큰은 개체 코드로 변환됩니다.
링크
모든 외부 참조는 실행 프로그램 또는 동적 연결 라이브러리를 만들기 위해 확인됩니다.
컴파일러에서 구문 오류가 발생하는 변환 단계 중 경고 또는 오류가 발생합니다.
링커는 모든 외부 참조를 확인하고 표준 라이브러리에 따라 하나 이상의 별도 처리되는 변환 단위를 결합하여 DLL 또는 실행 프로그램을 만듭니다.