산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C - 전처리기

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

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

Sr.No. 지시 및 설명
1

#정의

전처리기 매크로를 대체합니다.

2

#포함

다른 파일의 특정 헤더를 삽입합니다.

3

#undef

전처리기 매크로를 정의 해제합니다.

4

#ifdef

이 매크로가 정의되어 있으면 true를 반환합니다.

5

#ifndef

이 매크로가 정의되지 않은 경우 true를 반환합니다.

6

#만약

컴파일 시간 조건이 참인지 테스트합니다.

7

#else

#if.

의 대안
8

#엘리프

하나의 명령문에 #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"

이 지시문은 시스템 라이브러리에서 stdio.h를 가져오도록 CPP에 지시합니다. 현재 소스 파일에 텍스트를 추가합니다. 다음 줄은 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 컴파일러에 플래그를 지정합니다. 이것은 DEBUG를 정의하므로 컴파일하는 동안 즉시 디버깅을 켜고 끌 수 있습니다.

사전 정의된 매크로

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__ );

}

위의 코드가 test.c 파일에 있을 때 컴파일되고 실행되면 다음 결과가 생성됩니다 -

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

전처리기 연산자

C 전처리기는 매크로 생성을 돕기 위해 다음과 같은 연산자를 제공합니다 -

매크로 연속(\) 연산자

매크로는 일반적으로 한 줄로 제한됩니다. 매크로 연속 연산자(\)는 한 줄에 너무 긴 매크로를 계속하는 데 사용됩니다. 예를 들어 -

#define  message_for(a, b)  \
   printf(#a " and " #b ": We love you!\n")

문자열화(#) 연산자

문자열화 또는 숫자 기호 연산자( '#' )는 매크로 정의 내에서 사용될 때 매크로 매개변수를 문자열 상수로 변환합니다. 이 연산자는 지정된 인수 또는 매개변수 목록이 있는 매크로에서만 사용할 수 있습니다. 예를 들어 -

라이브 데모
#include <stdio.h>

#define  message_for(a, b)  \
   printf(#a " and " #b ": We love you!\n")

int main(void) {
   message_for(Carole, Debra);
   return 0;
}

위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -

Carole and Debra: We love you!

토큰 붙여넣기(##) 연산자

매크로 정의 내의 토큰 붙여넣기 연산자(##)는 두 인수를 결합합니다. 매크로 정의에 있는 두 개의 개별 토큰을 단일 토큰으로 결합할 수 있습니다. 예를 들어 -

라이브 데모
#include <stdio.h>

#define tokenpaster(n) printf ("token" #n " = %d", token##n)

int main(void) {
   int token34 = 40;
   tokenpaster(34);
   return 0;
}

위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -

token34 = 40

이 예제가 전처리기에서 다음과 같은 실제 출력을 내기 때문에 일어난 일입니다. -

printf ("token34 = %d", token34);

이 예는 token##n을 token34로 연결하는 것을 보여주며 여기에서는 stringize를 모두 사용했습니다. 및 토큰 붙여넣기 .

Defined() 연산자

전처리기가 정의됨 연산자는 식별자가 #define을 사용하여 정의되었는지 확인하기 위해 상수 표현식에서 사용됩니다. 지정된 식별자가 정의된 경우 값은 true(0이 아님)입니다. 기호가 정의되지 않은 경우 값은 거짓(영)입니다. 정의된 연산자는 다음과 같이 지정됩니다 -

라이브 데모
#include <stdio.h>

#if !defined (MESSAGE)
   #define MESSAGE "You wish!"
#endif

int main(void) {
   printf("Here is the message: %s\n", MESSAGE);  
   return 0;
}

위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -

Here is the message: You wish!

매개변수화된 매크로

CPP의 강력한 기능 중 하나는 매개변수화된 매크로를 사용하여 기능을 시뮬레이션하는 기능입니다. 예를 들어 다음과 같이 숫자를 제곱하는 코드가 있을 수 있습니다. -

int square(int x) {
   return x * x;
}

다음과 같이 매크로를 사용하여 코드 위에 다시 작성할 수 있습니다. -

#define square(x) ((x) * (x))

인수가 있는 매크로는 #define을 사용하여 정의해야 합니다. 지시문을 사용할 수 있습니다. 인수 목록은 괄호로 묶여 있으며 매크로 이름 바로 뒤에 와야 합니다. 매크로 이름과 여는 괄호 사이에는 공백이 허용되지 않습니다. 예를 들어 -

라이브 데모
#include <stdio.h>

#define MAX(x,y) ((x) > (y) ? (x) : (y))

int main(void) {
   printf("Max between 20 and 10 is %d\n", MAX(10, 20));  
   return 0;
}

위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -

Max between 20 and 10 is 20

C 언어

  1. C# Hello World - 첫 번째 C# 프로그램
  2. C# 키워드 및 식별자
  3. C# 변수 및 (기본) 데이터 형식
  4. C# 연산자
  5. C# 비트 및 비트 시프트 연산자
  6. C# 기본 입력 및 출력
  7. C# 식, 문 및 블록(예제 포함)
  8. C# 주석
  9. C# switch 문
  10. C# 삼항(? :) 연산자