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를 모두 사용했습니다. 및 토큰 붙여넣기 .
전처리기가 정의됨 연산자는 식별자가 #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 언어
C# foreach 루프 이 기사에서는 foreach 루프(for 루프의 대안)와 이를 배열 및 컬렉션과 함께 사용하는 방법에 대해 알아봅니다. C#은 배열/컬렉션 항목을 반복하기 위해 배열 및 컬렉션으로 작업할 때 for 루프인 for 루프에 대한 사용하기 쉽고 읽기 쉬운 대안을 제공합니다. foreach 루프는 각 항목을 반복하므로 foreach 루프라고 합니다. foreach 루프를 진행하기 전에 다음을 방문하십시오. C# for 루프 C# 배열 C# 컬렉션 foreach 루프의 구문 foreach (eleme
C 전처리기 및 매크로 이 자습서에서는 c 전처리기를 소개하고 예제를 통해 #include, #define 및 조건부 컴파일을 사용하는 방법을 배웁니다. C 전처리기는 프로그램을 컴파일하기 전에 변환하는 매크로 전처리기(매크로 정의 가능)입니다. 이러한 변환에는 헤더 파일, 매크로 확장 등이 포함될 수 있습니다. 모든 전처리 지시문은 #로 시작합니다. 상징. 예를 들어, #define PI 3.14 C 전처리기의 일반적인 용도는 다음과 같습니다. 헤더 파일 포함:#include #include 전처리기는 C 프로그램에