| HOME / 정보공유 / AIX 명령어 모음

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