전처리기 예제

2 단계로 확장되기 때문에 이것은 조금 까다롭습니다. 첫 번째 num2str(CONST)은 str(23)으로 대체되고, 이 str(23)은 차례로 “23”으로 대체됩니다. 다음 예제에서 유용할 수 있습니다. #다음에 지시문 이름인 식별자가 있습니다. 예를 들어 #define 매크로를 정의하는 지시문입니다. 공백은 #이전과 이후에도 허용됩니다. 인수가 있는 매크로는 #define 지시문을 사용하여 정의해야 사용가능합니다. 인수 목록은 괄호로 둘러싸여 있으며 즉시 매크로 이름을 따라야 합니다. 매크로 이름과 열린 괄호 사이에는 공백이 허용되지 않습니다. 예를 들어 – M4는 C 전처리기때로는 비 C 특정 역할에 사용되지만, 이러한 범용 전처리기의 가장 잘 알려진 예입니다. 예: 경고: 프로세서 전 매크로는 유혹적이지만 제대로 수행되지 않으면 예기치 않은 결과가 발생할 수 있습니다. 매크로는 컴파일되기 전에 소스 코드에 대한 텍스트 대체입니다.

컴파일러는 매크로에 대해 아무 것도 알지 못하며 매크로를 볼 수 없습니다. 이 모호한 오류를 생성할 수 있습니다., 다른 부정적인 효과 사이. 언어 기능을 사용하는 것을 선호합니다(예: #defined 상수 대신 const int 또는 열거형 사용). 상기와 같은 각도 브래킷을 사용하는 경우, 전처리기는 표준에 대한 개발 환경 경로를 따라 포함 파일을 검색하도록 지시된다. #및 ## 연산자는 #define 매크로와 함께 사용됩니다. #을 사용하면 # 다음의 첫 번째 인수가 따옴표의 문자열로 반환됩니다. 예를 들어, 명령 구문 사용자 지정의 좋은 예는 Objective Caml 프로그래밍 언어에서 두 개의 서로 다른 구문이 존재합니다. [1] 프로그램은 “일반 구문” 또는 “개정된 구문”을 사용하여 다르게 작성될 수 있으며 필요에 따라 어느 구문으로도 꽤 인쇄될 수 있습니다. # 및 지시문 이름은 매크로 확장에서 가져올 수 없습니다. 예를 들어 foo가 정의하기 위해 확장되는 매크로로 정의된 경우 #foo 유효한 전처리 지시문이 되지 않습니다. 이 예제에서는 token34에 token##n 연결하는 것을 보여 주며 여기에서 stringize 및 토큰 붙여넣기를 모두 사용했습니다.

이 예제에서는 지원되는 각 형식에 대한 인쇄 형식을 정의하여 이 헤더 파일에 의해 생성된 확장 코드를 줄이는 추가 이점을 통해 이 예제에서 각 데이터 형식에 대해 별도의 처리기 함수를 만드는 것을 방지할 수 있습니다. 예를 들어, 백슬래시-Newline으로 라인을 코스메틱하게 분할할 수 있습니다: 개별 데이터 형식에 대한 처리기를 만들고 토큰 연결(“#”)과 인용(“#”) 연산자로 만들 수 있습니다. 예를 들어 위의 코드에 다음이 추가될 수 있습니다. 일부 컴퓨터 언어(예: C 및 PL/I)에는 전처리라고 하는 번역 단계가 있습니다. 또한 매크로 처리, 파일 포함 및 언어 확장명도 포함될 수 있습니다. 이 예는 전처리자로부터 다음과 같은 실제 출력을 초래하기 때문에 그렇게 일어났다 – #if 명령은 제어 조건식이 0 또는 비영으로 평가되는지 여부를 확인하고 각각 코드 블록을 제외하거나 포함합니다. 예: ##을 사용하면 ## 이전의 내용을 그 이후의 내용과 연결합니다. 예를 들어 명령 이것의 가장 일반적인 예는 `#`로 시작하는 줄을 지시대로 하는 C 전처리기입니다.