cpp 명령
용도
C 언어 소스 파일에 파일 포함 및 매크로 대체를 수행합니다.
구문
/usr/ccs/lib/cpp [ -C ] [ -P ] [ -qDBCS ] [ -I디렉토리 ] [ -U이름 ] [ -D이름 [=정의 ]] [ -qlanglvl=언어 ] [ InFile ] [ OutFile ]
설명
cpp 명령은 C 언어 소스 파일에 파일을 포함시키거나 매크로를 대체합니다. 이 명령은 Infile을 읽어 OutFile에 기록합니다(디폴트에 의해 표준 입력 및 표준 출력).
cpp 명령은 문서 "정보 시스템을 위한 미국립 표준 초안 - 프로그래밍 언어 C"(X3J11/88-159)의 정의에 따라 C 언어에 대한 사전처리 지시문 및 명령어를 준수하도록 고안됩니다.
cpp 프로그램은 다음과 같은 특수 이름을 인식합니다.
| 항목 | 설명 |
|---|---|
| __LINE__ | 현재 행 번호입니다. |
| ___날짜__ | 소스 파일의 변환 날짜입니다. |
| __시간__ | 소스 파일의 변환 시간입니다. |
| __STDC__ | 준수하는 구현을 나타냅니다. |
| __파일__ | 현재 파일 이름입니다. |
| __STR__ | 컴파일러에서 /usr/include/string.h에 정의된 대로 특정 문자열 기능에 대한 인라인 코드를 생성함을 표시합니다. |
| __MATH__ | 컴파일러에서 /usr/include/math.h에 정의된 대로 특정 수학 기능에 대한 인라인 코드를 생성함을 표시합니다. |
| __ANSI__ | langlvl이 ANSI와 같게 설정되었음을 나타냅니다. |
| __SAA__ | langlvl 이 SAA와 동일하게 설정되었음을 표시합니다. |
| __SAA_L2__ | langlvl이 SAAL2와 같게 설정되었음을 나타냅니다. |
| __확장된 내용__ | langlvl이 extended와 같게 설정되었음을 나타냅니다. |
| __타임스탬프__ | 소스 파일이 최종 수정된 날짜 및 시간을 나타냅니다. |
모든 cpp 지시문 행은 #(파운드 부호)로 시작해야 합니다. 이 지시문은 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| #define 이름 TokenString | Name의 후속 인스턴스를 TokenString으로 대체합니다. |
| #define 이름(Argument, ...,Argument) TokenString | 시퀀스 Name(Argument, . . . ,Argument)의 후속 인스턴스를 TokenString으로 대체합니다. 여기서, TokenString의 각 Argument 발생은 쉼표로 구분된 리스트에 있는 해당 토큰으로 대체됩니다. Name과 왼쪽 괄호 사이에 공백이 있어서는 안된다는 점에 주의하십시오. |
| #undef 이름 | 여기서부터 Name에 대한 정의를 무시합니다. |
| #include "File" 또는 #include <File > | 여기에 File의 내용을 포함한 후 cpp로 처리합니다. 이중 인용 부호 " "로 File을 묶으면 cpp 명령은 먼저 InFile의 디렉토리에서 검색하고, 다음으로 -I 플래그로 이름 지정된 디렉토리에서 검색하고, 마지막으로 표준 리스트의 디렉토리에서 검색합니다. <File> 표기법을 사용하는 경우, cpp 명령은 표준 디렉토리에서만 File 을 검색합니다. InFile이 상주하는 디렉토리는 검색하지 않습니다. |
| #line 번호 ["파일"] | 다음 순서의 소스 행이 Number로 지정된 행 번호가 있는 소스 행으로 시작되는 것처럼 구현합니다. File이 제공되는 경우, 파일의 추정된 이름이 File로 변경됩니다. |
| #오류 TokenString | TokenString을 포함하는 진단 메시지를 생성합니다. |
| #pragma TokenString | 컴파일러에 대한 구현 정의 명령어입니다. |
| #endif | 테스트 지시문(#if, #ifdef 또는 #ifndef)으로 시작하는 행의 섹션을 종료합니다. 각 테스트 지시문에는 대응하는 #endif가 있어야 합니다. |
| #ifdef 이름 | 다음 경우에만 출력에 후속 행을 배치합니다. Name은 이전 #define으로 정의됩니다. 또는 Name이 -D 플래그에 의해 정의됩니다. 또는 Name은 cpp 명령으로 인식된 특수 이름입니다. 및 Name은 개입하는 #undef로 정의 해제되지 않습니다. 또는 Name은 -U 플래그로 정의 해제되지 않습니다. |
| #ifndef 이름 | 다음 경우에만 출력에 후속 행을 배치합니다. Name은 이전 #define으로 정의되지 않습니다. 및 Name은 cpp 명령으로 인식된 특수 이름이 아닙니다. 또는 Name은 이전 #define으로 정의되지만, 개입하는 #undef로 정의 해제됩니다. 또는 Name은 cpp 명령으로 인식된 특수 이름이지만, -U 플래그로 정의 해제됩니다. |
| #if 표현식 | Expression이 제로가 아닌 값으로 평가되는 경우에만 출력에 후속 행을 배치합니다. 모든 2진비할당 C 연산자,?: 연산자와 단항 -, ! 및-연산자는 표현식에서 사용할 수 있습니다. 연산자의 우선순위는 C 언어에서 정의되는 것과 같습니다. 단항 연산자 defined도 있습니다. 이는 Expression에서 다음 두 양식으로 사용할 수 있습니다.
|
| #elif 표현식 | 선행 #if 또는 #elif 지시문의 표현식이 거짓으로 평가되거나 정의 해제된 경우에만 출력에 후속 행을 배치하고 이 Expression은 참으로 평가됩니다. |
| #else | 선행 #if 또는 #elif
지시문의 표현식이 거짓으로 평가되거나 정의되어 있지 않은 경우(따라서 #if 뒤와 #else의앞 행은 무시됨)에만
출력에 후속 행을 배치합니다. 각 테스트 지시문의 조건이 순서대로 확인됩니다. 조건이 거짓(0)으로 평가되는 경우, 여기에서 제어하는 그룹은 생략됩니다. 지시문은 내포된 조건의 레벨을 추적하기 위해서 지시문을 판별하는 이름을 통해서만 처리됩니다. 그룹에 있는 다른 사전 처리 토큰과 마찬가지로, 지시문의 사전 처리 토큰 나머지는 무시됩니다. 제어 조건이 참(0이 아님)으로 평가되는 최초 그룹만이 처리됩니다. true로 평가되는 조건이 없고, #else 지시문이 있으면 #else로 제어되는 그룹이 처리됩니다. #else 지시문이 없으면 #endif까지 모든 그룹을 건너뜁니다. |
플래그
| 항목 | 설명 |
|---|---|
| -c | 소스 파일에서 출력 파일로 C 언어 주석을 복사합니다. 이 플래그를 생략하면, cpp 명령은 cpp 지시문 행에서 발견되는 것들을 제외한 모든 C 언어 주석을 제거합니다. |
| -D이름[=정의] | Name을 #define 지시문에서 정의합니다. 기본 정의 는 1입니다. |
| -I디렉토리 | 먼저 Directory에서 슬래시(/)로 시작하지 않는 이름의 #include 파일을 찾은 다음 표준 리스트의 디렉토리에서 찾습니다. 이전 #include 설명을 참조하십시오. |
| -p | C 컴파일러의 다음 패스를 위해 행 제어 정보를 생성하지 않고 입력을 사전 처리합니다. |
| - qDBCS | 2바이트 문자 세트 모드를 지정합니다. |
| -U이름 | 이름의 초기 정의를 제거합니다. 여기서 이름 은 프리프로세서에 의해 사전 정의된 기호입니다 (네 개의 프리프로세서 모드 표시기 __ANSI__, __EXTENDED__, __SAA__및 __SAA_L2__는 제외). 이 플래그는 ANSI 모드에서 인식되지 않습니다. |
| -qlanglvl=언어 | 처리를 위한 언어 레벨을 선택합니다. 언어 는 ANSI, SAA, SAAL2또는 확장일 수 있습니다. 디폴트는 확장입니다.주: Language가 확장인 경우 _NO_PROTO는 자동으로 정의되지 않습니다. 이러한 정의는 /etc/xlc.cfg 파일에서 -D 옵션을 사용하여 수행할 수 있습니다. |
예
- 프리프로세서가 C 컴파일러로
전송하는 텍스트를 표시하려면, 다음과 같이 입력하십시오.
이 사전 처리pgm.c워크스테이션에 결과 텍스트를 표시합니다. 매크로 정의에서 오류를 찾을 때 프리프로세서 출력을 볼 수 있습니다./usr/ccs/lib/cpp pgm.c - 더 많은 읽기 가능한 텍스트가 사전처리되어 있는 파일을
작성하려면 다음과 같이 입력하십시오.
이 사전 처리pgm.c결과를 다음 위치에 저장합니다.pgm.i. C 컴파일러를 위한 행 번호 지정 정보를 생략합니다 (-P), 프로그램 주석 (-C)./usr/ccs/lib/cpp -P -C pgm.c pgm.i - 매크로 ID를 사전정의하려면,
다음과 같이 입력하십시오.
이는BUFFERSIZE값으로512및DEBUG값으로1사전 처리하기 전에./usr/ccs/lib/cpp -DBUFFERSIZE=512 -DDEBUG pgm.c pgm.i - 비표준 디렉토리에 있는
#include 파일을 사용하려면 다음과 같이 입력하십시오.
현재 디렉토리에서 따옴표로 묶인 #include 파일을 찾은 다음/home/jim/include, 그 다음에 표준 디렉토리에 있습니다. 다음을 찾습니다./home/jim/include괄호로 묶인 #include 파일 (< >) 의 경우에는 표준 디렉토리에 있습니다./usr/ccs/lib/cpp -I/home/jim/include pgm.c - ANSI 정의로 사전처리하려면
다음과 같이 입력하십시오.
/usr/ccs/lib/cpp -qlanglvl=ansi pgm.c
파일
| 항목 | 설명 |
|---|---|
| /usr/include | #include 파일에 대한 표준 디렉토리입니다. |