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

C++ 전처리기

전처리기는 실제 컴파일이 시작되기 전에 정보를 전처리하도록 컴파일러에 지시하는 지시문입니다.

모든 전처리기 지시문은 #으로 시작하고 공백 문자만 행에서 전처리기 지시문 앞에 나타날 수 있습니다. 전처리기 지시문은 C++ 문이 아니므로 세미콜론(;)으로 끝나지 않습니다.

이미 #include를 보았습니다. 모든 예에서 지시문. 이 매크로는 헤더 파일을 소스 파일에 포함하는 데 사용됩니다.

#include, #define, #if, #else, #line 등과 같이 C++에서 지원하는 많은 전처리기 지시문이 있습니다. 중요한 지시문을 살펴보겠습니다 −

#define 전처리기

#define 전처리기 지시문은 기호 상수를 만듭니다. 기호 상수를 매크로라고 합니다. 지시문의 일반 형식은 -

입니다.
#define macro-name replacement-text 

이 줄이 파일에 나타나면 프로그램이 컴파일되기 전에 해당 파일의 모든 매크로 후속 항목이 대체 텍스트로 바뀝니다. 예를 들어 -

#include <iostream>
using namespace std;

#define PI 3.14159

int main () {
   cout << "Value of PI :" << PI << endl; 

   return 0;
}

이제 이 코드의 전처리를 수행하여 소스 코드 파일이 있다고 가정하고 결과를 확인하겠습니다. 따라서 -E 옵션을 사용하여 컴파일하고 결과를 test.p로 리디렉션합니다. 이제 test.p를 확인해보면 많은 정보가 있을 것이고 하단에는 다음과 같이 치환된 값을 볼 수 있을 것이다 -

$gcc -E test.cpp > test.p

...
int main () {
   cout << "Value of PI :" << 3.14159 << endl; 
   return 0;
}

기능과 유사한 매크로

#define을 사용하여 다음과 같이 인수를 취하는 매크로를 정의할 수 있습니다 -

라이브 데모
#include <iostream>
using namespace std;

#define MIN(a,b) (((a)<(b)) ? a : b)

int main () {
   int i, j;
   
   i = 100;
   j = 30;
   
   cout <<"The minimum is " << MIN(i, j) << endl;

   return 0;
}

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

The minimum is 30

조건부 컴파일

프로그램 소스 코드의 선택적 부분을 컴파일하는 데 사용할 수 있는 몇 가지 지시문이 있습니다. 이 과정을 조건부 컴파일이라고 합니다.

조건부 전처리기 구조는 'if' 선택 구조와 매우 유사합니다. 다음 전처리기 코드를 고려하십시오 -

#ifndef NULL
   #define NULL 0
#endif

디버깅 목적으로 프로그램을 컴파일할 수 있습니다. 다음과 같이 단일 매크로를 사용하여 디버깅을 켜거나 끌 수도 있습니다. -

#ifdef DEBUG
   cerr <<"Variable x = " << x << endl;
#endif

이로 인해 cerr 기호 상수 DEBUG가 지시문 #ifdef DEBUG 전에 정의된 경우 프로그램에서 컴파일될 명령문. 다음과 같이 #if 0 문을 사용하여 프로그램의 일부를 주석 처리할 수 있습니다. -

#if 0
   code prevented from compiling
#endif

다음 예를 시도해 보겠습니다 -

라이브 데모
#include <iostream>
using namespace std;
#define DEBUG

#define MIN(a,b) (((a)<(b)) ? a : b)

int main () {
   int i, j;
   
   i = 100;
   j = 30;

#ifdef DEBUG
   cerr <<"Trace: Inside main function" << endl;
#endif

#if 0
   /* This is commented part */
   cout << MKSTR(HELLO C++) << endl;
#endif

   cout <<"The minimum is " << MIN(i, j) << endl;

#ifdef DEBUG
   cerr <<"Trace: Coming out of main function" << endl;
#endif

   return 0;
}

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

The minimum is 30
Trace: Inside main function
Trace: Coming out of main function

# 및 ## 연산자

# 및 ## 전처리기 연산자는 C++ 및 ANSI/ISO C에서 사용할 수 있습니다. # 연산자를 사용하면 대체 텍스트 토큰이 따옴표로 묶인 문자열로 변환됩니다.

다음 매크로 정의를 고려하십시오 -

라이브 데모
#include <iostream>
using namespace std;

#define MKSTR( x ) #x

int main () {

   cout << MKSTR(HELLO C++) << endl;

   return 0;
}

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

HELLO C++

그것이 어떻게 작동했는지 봅시다. C++ 전처리기가 행을 −

cout << MKSTR(HELLO C++) << endl;

위 줄은 다음 줄로 바뀝니다 -

cout << "HELLO C++" << endl;

## 연산자는 두 개의 토큰을 연결하는 데 사용됩니다. 다음은 예입니다 -

#define CONCAT( x, y )  x ## y

CONCAT이 프로그램에 나타나면 해당 인수가 연결되어 매크로를 대체하는 데 사용됩니다. 예를 들어 CONCAT(HELLO, C++)은 다음과 같이 프로그램에서 "HELLO C++"로 대체됩니다.

라이브 데모
#include <iostream>
using namespace std;

#define concat(a, b) a ## b
int main() {
   int xy = 100;
   
   cout << concat(x, y);
   return 0;
}

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

100

그것이 어떻게 작동했는지 봅시다. C++ 전처리기가 −

로 변환한다는 것을 이해하는 것은 간단합니다.
cout << concat(x, y);

위 줄은 다음 줄로 변환됩니다 -

cout << xy;

미리 정의된 C++ 매크로

C++는 아래에 언급된 다수의 미리 정의된 매크로를 제공합니다 -

Sr.No 매크로 및 설명
1

__LINE__

이것은 컴파일될 때 프로그램의 현재 줄 번호를 포함합니다.

2

__FILE__

이것은 컴파일될 때 프로그램의 현재 파일 이름을 포함합니다.

3

__DATE__

여기에는 소스 파일을 개체 코드로 변환한 날짜인 월/일/년 형식의 문자열이 포함됩니다.

4

__TIME__

여기에는 프로그램이 컴파일된 시간인 시간:분:초 형식의 문자열이 포함됩니다.

위의 모든 매크로에 대한 예를 살펴보겠습니다 -

라이브 데모
#include <iostream>
using namespace std;

int main () {
   cout << "Value of __LINE__ : " << __LINE__ << endl;
   cout << "Value of __FILE__ : " << __FILE__ << endl;
   cout << "Value of __DATE__ : " << __DATE__ << endl;
   cout << "Value of __TIME__ : " << __TIME__ << endl;

   return 0;
}

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

Value of __LINE__ : 6
Value of __FILE__ : test.cpp
Value of __DATE__ : Feb 28 2011
Value of __TIME__ : 18:52:48

C 언어

  1. C# 전처리기 지시문
  2. C++ 데이터 유형
  3. C++ 연산자
  4. C++ 주석
  5. C++ 생성자
  6. C++ 클래스 템플릿
  7. C - 전처리기
  8. C++ 개요
  9. C++ 상수/리터럴
  10. C++의 연산자