preprocessor directives c
C ++의 전 처리기 지시문 자세히 살펴보기.
전처리 기는 C ++의 고유 한 기능입니다. C ++에는 일반적인 프로그램에 대한 컴파일, 링크 및 실행과 같은 단계가 있습니다. 실제로 컴파일을 위해 프로그램을 전달하기 전에 처리해야하는 C ++ 프로그램에는 다른 많은 기능이 있습니다.
이를 위해 전처리라는 특별한 단계가 수행됩니다. 사전 처리는 컴파일 프로세스 전에 수행되며 특수 기능은 사전 처리됩니다. 결과적으로 확장 된 C ++ 프로그램을 얻은 다음 컴파일러에 전달합니다.
=> 처음부터 C ++를 배우려면 여기를 방문하십시오.
학습 내용 :
개요
전처리를위한 특수 기능은 '전 처리기 지시문'이라는 엔티티를 사용하여 식별됩니다. 이러한 전 처리기 지시문은 전 처리기 지시문으로 표시된 C ++ 프로그램의 특정 정보가 컴파일 전에 전처리되어야 함을 컴파일러에 알려줍니다.
C ++에서 모든 전 처리기 지시문은 '#'기호로 시작합니다. 전 처리기 (컴파일러의 일부)가 # 기호를 만나는 순간, # 기호 다음에 나오는 정보는 프로그램을 컴파일러에 전달하기 전에 전처리됩니다.
다른 C ++ 문과 달리 전 처리기 지시문은 세미콜론으로 끝나지 않습니다.
이 자습서에서는 C ++에서 지원하는 다양한 전 처리기 지시문을 살펴 봅니다.
파일 포함 지시문
#포함
파일 포함 지시문 #include를 사용하면 소스 프로그램에 다른 파일을 포함 할 수 있습니다. 이러한 함수를 사용하여 프로그램에 미리 정의 된 다양한 함수의 정의를 포함하는 헤더 파일을 포함 할 수 있습니다. 다음 구문을 사용하여 프로그램에 헤더 파일을 포함 할 수 있습니다.
#include
예: #포함
우리는 이미 C ++ 프로그램에서 이것을 보았습니다. 헤더 iostream에는 cout, cin 등과 같은 입력 / 출력 데이터 스트리밍에 필요한 함수가 포함되어 있습니다.
프로그램이 커지거나 기능이 복잡 해짐에 따라 프로그램을 다양한 파일로 나누거나 다른 파일에서 기능을 가져올 수 있습니다. 이 경우 사용자 정의 파일을 사용합니다. 프로그램에 사용자 정의 파일을 포함하기 위해 다음 구문의 #include 지시문을 사용할 수 있습니다.
#include “filename”
예: #include“vector_int.h”
기능을 사용하기 위해 프로그램에 포함하려는 사용자 정의 헤더 파일입니다.
아래 코드 예제는 #include 지시문의 사용법을 보여줍니다.
경험이 풍부한 pl SQL 인터뷰 질문
#include using namespace std; int main() { cout<<'This is an example demonstrating inclusion directive #include'; }
산출:
이것은 포함 지시문 #include를 보여주는 예입니다.
표시된대로 프로그램에 헤더의 기능을 포함하기 위해 #include 지시문을 사용했습니다.
매크로 정의 지시문
#밝히다
#define 지시문은 C ++ 프로그램에서 기호 상수 또는 매크로를 정의하는 데 사용됩니다.
#define 지시문의 일반적인 형식은 다음과 같습니다.
#define macro_name replacement code
전처리 기가 프로그램에서 매크로를 발견하면 전처리 기는 코드가 컴파일러에 전달되기 전에 #define 지시문을 사용하여 정의 된 코드로이 매크로를 대체합니다.
아래 코드 예제는 #define 지시문을 사용하여 정의 된 기호 상수 RADIUS와 프로그램에서의 사용법을 보여줍니다.
#include #define RADIUS 5 using namespace std; int main() { cout<<'Area of a circle : '<<3.142 * RADIUS * RADIUS; }
산출:
원의 면적 : 78.55
프로그램에서 볼 수 있듯이 코드에서 기호 상수 RADIUS를 사용할 수 있으며 #define 지시문을 사용하여 정의 된 값으로 대체됩니다.
최고의 온도 모니터링 소프트웨어 Windows 10
#define 지시문을 사용하여 적절한 함수 코드를 정의 할 수 있습니다. 이러한 기능은 일반적으로 작은 기능입니다.
아래에 예가 나와 있습니다.
#include #define REC_AREA(length, breadth) (length * breadth) using namespace std; int main() { int length = 20, breadth = 5, area; area = REC_AREA(length, breadth); cout << 'Area of a rectangle is: ' << area; return 0; }
산출:
직사각형의 면적 : 100
여기서 #define 지시문을 사용하여 두 개의 인수, 즉 길이와 너비를 취하고 직사각형의 면적을 계산하는 함수 REC_AREA를 정의했습니다. 주 함수에서 우리는이 매크로를 사용하고 직사각형의 면적을 얻기 위해 두 개의 인수를 제공합니다.
#undef
#define 지시문으로 정의 된 프로그램의 매크로는 #undef 지시문을 사용하여 정의되지 않을 때까지 지속됩니다. 프로그램이 #undef를 발견하면 이후에 매크로를 사용하면 (#undef에 의해 정의되지 않음) 컴파일 오류가 발생합니다.
위의 프로그램에서 정수 선언 뒤에 #undef REC_AREA 문을 제공하면 프로그램은 컴파일 오류를 발생시킵니다.
조건부 컴파일 지시문
위에서 설명한 지시문 외에도 C ++는 코드의 조건부 컴파일에 사용할 수있는 다음 지시문도 제공합니다. 이러한 지시문은 C ++의 if-else 문의 유사한 행에서 사용할 수 있습니다.
예를 들어, 이러한 조건부 지시문을 사용하여 프로그램의 DEBUG를 ON 또는 OFF로 설정할 수 있습니다.
C ++에서 제공되는 일부 조건부 컴파일 지시문은 다음과 같습니다.
- #만약
- #elif
- #endif
- #ifdef
- #ifndef
- #그밖에
아래 프로그램은 C ++ 프로그램에서 조건부 컴파일 지시문의 사용법을 보여줍니다.
#include using namespace std; #define DEBUG #define MAX(a,b) (((a)>(b)) ? a : b) int main () { int i, j; i = 100; j = 50; #ifdef DEBUG cout <<'Trace: Start of main function' << endl; #endif cout <<'The maximum is ' << MAX(i, j) << endl; #undef MAX //cout <<'The maximum is ' << MAX(10,20) << endl; #ifdef DEBUG cout <<'Trace: End of main function' << endl; #endif return 0; }
산출:
추적 : 주요 기능 시작
최대 값은 100입니다.
추적 : 주 기능의 끝
위의 프로그램에서 우리는 프로그램에 대한 DEBUG를 정의하기 위해 #ifdef – #endif 지시문을 사용합니다. 그런 다음 #undef 지시문을 사용하여 매크로 함수 MAX를 정의 해제했습니다. 조건부 컴파일 지시문은 #ifdef를 구성합니다. – #endif는 DEBUG가 설정되어 있는지 확인하고 설정되어 있으면 프로그램에서 몇 개의 메시지를 인쇄합니다.
# & ## 연산자
# 및 ## 연산자는 텍스트 토큰을 표시 할 문자열로 변환하고 두 토큰을 연결하는 데 각각 사용되는 두 개의 특수 연산자입니다.
아래는이 두 연산자를 모두 보여주는 예입니다.
#include using namespace std; #define MKSTR( x ) #x #define concat(a, b) a ## b int main () { cout <<'MKSTR(Hello World) = '<< MKSTR(Hello World) << endl; int xy = 100; cout <<'concat(x,y) = '< 산출:
MKSTR (Hello World) = Hello World
연결 (x, y) = 100
위의 프로그램에서 우리는 인수 x로 MKSTR을 정의합니다. 본문 #x가 있습니다. 'Hello World'인수를 사용하여이 MKSTR을 인쇄하면 #x 때문에 인수가 문자열로 변환되고 출력에 표시된다는 것을 알 수 있습니다.
다음으로, 우리는 두 개의 인수 a와 b로 concat 함수를 정의했습니다. 본문에는 a ## b를 지정합니다. 식 a ## b는 ab와 같습니다. 따라서 주 함수에서 concat (x, y)를 호출하면 실제로 정의한 정수 변수와 동일한 xy로 평가됩니다.
기타 지침
#오류
#error 지시문의 일반 구문은 다음과 같습니다.
#error error_message
컴파일러가 #error 지시문을 만나면 error_message를 표시하고 컴파일이 중지됩니다. error_message 인수는 따옴표가 있거나없는 하나 이상의 단어를 포함 할 수 있습니다.
#선
이것은 컴파일러가 내부적으로 저장된 줄 번호와 파일 이름을 주어진 줄 번호와 파일 이름으로 변경하도록 지시합니다.
#선 숫자 시퀀스 ( '파일 이름')
digit_sequence는 정수 상수 일 수 있습니다.
이클립스 C ++ 설치 방법
예:#line 200 test.c
위의 예에서 내부적으로 저장된 줄 번호는 200으로 설정되고 파일 이름은 test.c로 변경됩니다.
#pragma
컴파일러에 구현 정의 명령을 제공합니다. 이러한 지침은 컴파일러 및 플랫폼에 따라 다릅니다. 명령어가 일치하지 않으면 구문 오류를 생성하지 않고 명령어가 무시됩니다.
미리 정의 된 매크로
또한 C ++는 프로그래머가 사용할 수있는 사전 정의 된 수많은 매크로를 정의합니다.
이러한 매크로 중 일부는 아래 표로 정리되어 있습니다.
미리 정의 된 매크로 기술 __파일__ 컴파일중인 프로그램의 현재 파일 이름 __데이트__ 소스 코드를 월 / 일 / 년 형식의 개체 코드로 변환 한 날짜 __시각__ 프로그램이 컴파일되는 시간 : 분 : 초 형식의 시간 __선__ 컴파일중인 프로그램의 현재 줄 번호 __cplusplus 각 컴파일러 버전에 대해 정의 된 정수 상수
다음 프로그램은 프로그램에서 이러한 매크로를 보여줍니다.
#include using namespace std; int main () { cout<<'__LINE__ :' << __LINE__ << endl; cout<<'__FILE__ :' << __FILE__ << endl; cout<<'__DATE__ :' << __DATE__ << endl; cout<<'__TIME__ :' << __TIME__ << endl; cout<<'__cplusplus:'<<__cplusplus< 산출:
__LINE__ : 5
__FILE__ : prog.cpp
__DATE__ : 2019 년 4 월 15 일
__TIME__ : 12 : 09 : 15
__cplusplus : 201402
위의 프로그램 출력은 위의 미리 정의 된 매크로에 대한 설명과 일치하며 자명합니다.
결론
이 튜토리얼에서는 예제와 함께 C ++에서 제공하는 다양한 전 처리기 지시문을 보았습니다. 전 처리기 지시문은 더 효율적인 프로그램과 더 읽기 쉬운 프로그램을 어느 정도 작성하는 데 도움이됩니다.
조건부 컴파일 지시문을 사용하면 프로그램 출력을 다양한 방식으로 분기 할 수 있습니다.
=> 여기에서 전체 C ++ 교육 시리즈를 찾아보십시오.
추천 도서
- 소프트웨어 테스팅 도움말 제휴 프로그램!
- 쓰기 및 적립-숙련 된 QA 테스터를위한 프로그램
- Unix Pipes 튜토리얼 : Unix 프로그래밍의 파이프
- C ++의 라이브러리 함수
- 무료로 C ++ 프로그래밍을 배우기위한 70 개 이상의 최고의 C ++ 자습서
- C ++의 명령 줄 인수
- STL의 반복자
- C ++의 이니셜 라이저 목록