Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C의 매크로와 전처리기

<시간/>

C 전처리기는 컴파일러의 일부가 아니지만 컴파일 프로세스의 별도 단계입니다. 간단히 말해서 C 전처리기는 텍스트 대체 도구이며 실제 컴파일 전에 필요한 전처리를 수행하도록 컴파일러에 지시합니다. C 전처리기를 CPP라고 부를 것입니다.

모든 전처리기 명령은 해시 기호(#)로 시작합니다. 공백이 아닌 첫 번째 문자여야 하며 가독성을 위해 전처리기 지시문은 첫 번째 열에서 시작해야 합니다. 다음 섹션은 모든 중요한 전처리기 지시문을 나열합니다 -

Sr.No 지시 및 설명
1 #define
전처리기 매크로를 대체합니다.
2 #포함
다른 파일의 특정 헤더를 삽입합니다.
3 #undef
전처리기 매크로를 정의 해제합니다.
4 #ifdef
이 매크로가 정의되어 있으면 true를 반환합니다.
5 #ifndef
이 매크로가 정의되지 않은 경우 true를 반환합니다.
6 #if
컴파일 시간 조건이 true인지 테스트합니다.
7 #else
#if의 대안.
8 #elif
하나의 명령문에 #else 및 #if.
9 #endif
조건부 전처리기를 종료합니다.
10 #오류
stderr에 오류 메시지를 인쇄합니다.
11 #pragma
표준화된 방법을 사용하여 컴파일러에 특수 명령을 실행합니다.

전처리기의 몇 가지 예 -

다양한 지시어를 이해하려면 다음 예를 분석하십시오.

#define MAX_ARRAY_LENGTH 20

이 지시문은 MAX_ARRAY_LENGTH의 인스턴스를 20으로 바꾸도록 CPP에 지시합니다. 가독성을 높이려면 상수에 #define을 사용하십시오.

#include <stdio.h>
#include "myheader.h"

이 지시문은 CPP가 시스템 라이브러리에서 stdio.h를 가져오도록 지시합니다. 현재 소스 파일에 텍스트를 추가합니다. 다음 줄은 CPP에 myheader.h를 가져오도록 지시합니다. 로컬 디렉토리에서 콘텐츠를 현재 소스 파일에 추가합니다.

#undef FILE_SIZE
#define FILE_SIZE 42

CPP에 기존 FILE_SIZE의 정의를 취소하고 42로 정의하도록 지시합니다.

#ifndef MESSAGE
#define MESSAGE "You wish!"
#endif

MESSAGE가 아직 정의되지 않은 경우에만 MESSAGE를 정의하도록 CPP에 지시합니다.

#ifdef DEBUG
/* Your debugging statements here */
#endif

DEBUG가 정의된 경우 동봉된 명령문을 처리하도록 CPP에 지시합니다. 이것은 컴파일 시 -DDEBUG 플래그를 gcc 컴파일러에 전달하는 경우에 유용합니다. 이것은 디버그를 정의하므로 컴파일하는 동안 즉시 디버깅을 켜고 끌 수 있습니다.

사전 정의된 매크로 -

ANSI C는 여러 매크로를 정의합니다. 각 매크로는 프로그래밍에 사용할 수 있지만 미리 정의된 매크로는 직접 수정하면 안 됩니다.

Sr.No 매크로 및 설명
1 __DATE__
"MMM DD YYYY" 형식의 문자 리터럴로서의 현재 날짜.
2 __TIME__
"HH:MM:SS" 형식의 문자 리터럴로서의 현재 시간입니다.
3 __FILE__
여기에는 현재 파일 이름이 문자열 리터럴로 포함됩니다.
4 __LINE__
여기에는 현재 줄 번호가 10진수 상수로 포함됩니다.
5 __STDC__
컴파일러가 ANSI 표준을 준수하는 경우 1로 정의됩니다.

예시

#include <stdio.h>
int main() {
   printf("File :%s\n", __FILE__ );
   printf("Date :%s\n", __DATE__ );
   printf("Time :%s\n", __TIME__ );
   printf("Line :%d\n", __LINE__ );
   printf("ANSI :%d\n", __STDC__ );
}

출력

File :test.c
Date :Jun 2 2012
Time :03:36:24
Line :8
ANSI :1