Latest web development tutorials

C 전 처리기

C 전처리의 일부 컴파일러 아니라, 별도의 공정을 컴파일하는 과정이다.즉, C 프리 프로세서는 텍스트 대체 도구는, 그들이 실제 필요하기 전에 완전한 전처리를 컴파일하도록 컴파일러에 지시 할 것이다. 우리는 C 전 처리기 (C 프리 프로세서)는 CPP로 축약됩니다.

모든 주문은 처음에 파운드 기호 (#)로 전처리이다. 그것은 첫 번째 공백이 아닌 문자 여야합니다 가독성을 향상시키기 위해, 처리기 지시문은 첫 번째 열에서 시작해야한다. 아래에 나열된 모든 중요한 사전 프로세서 명령어입니다

指令描述
#define定义宏
#include包含一个源代码文件
#undef取消已定义的宏
#ifdef如果宏已经定义,则返回真
#ifndef如果宏没有定义,则返回真
#if如果给定条件为真,则编译下面代码
#else#if 的替代方案
#elif如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码
#endif结束一个 #if……#else 条件编译块
#error当遇到标准错误时,输出错误消息
#pragma使用标准化方法,向编译器发布特殊的命令到编译器中

전처리의 예는

분석은 다음과 같은 예를 다른 지시 사항을 이해합니다.

#define MAX_ARRAY_LENGTH 20

이 지시어는 CPP 모든 MAX_ARRAY_LENGTH (20)를 교체 알려줍니다. 가독성을 향상시키기 위해 상수를 정의하는#DEFINE를 사용합니다.

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

지침은 시스템 라이브러리에서 얻고, 현재 소스 파일에 텍스트를 추가 STDIO.H CPP를 말한다.다음 줄은 로컬 디렉토리에서 얻을 현재 소스 파일에 내용을 추가myheader.h CPP를 알려줍니다.

#undef  FILE_SIZE
#define FILE_SIZE 42

이 명령은 CPP가 FILE_SIZE 정의 취소하고 42로 정의 알려줍니다.

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

이 명령은 메시지를 정의 할 때 메시지는 정의되지 않은 CPP 경우에만 알려줍니다.

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

당신이 DEBUG를 정의하면이 명령은 다음 처리 문을 수행 CPP를 알려줍니다. 당신이 GCC 컴파일러-DDEBUG 스위치를전달하는 경우 컴파일시에,이 명령은 유용합니다. 그것은 DEBUG를 정의, 당신은 항상 켜거나 컴파일시 디버깅을 해제 할 수 있습니다.

사전 정의 된 매크로

ANSI C 매크로의 수를 정의합니다. 프로그램에서는이 매크로를 사용할 수 있지만 다른 직접이 미리 정의 된 매크로를 수정할 수 있습니다.

描述
__DATE__当前日期,一个以 "MMM DD YYYY" 格式表示的字符常量。
__TIME__当前时间,一个以 "HH:MM:SS" 格式表示的字符常量。
__FILE__这会包含当前文件名,一个字符串常量。
__LINE__这会包含当前行号,一个十进制常量。
__STDC__当编译器以 ANSI 标准编译时,则定义为 1。

이제 다음 예를 봅시다 :

#include <stdio.h>

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

이 예는 토큰을 보여 ## N 여기에 token34에 연결, 우리는문자열 상수 양자화 연산자 (#) 토큰 붙여 넣기 연산자 (##)를 사용.

정의 () 연산자

정의 처리기 오퍼레이터 식별자는 #DEFINE를 사용하여 정의되었는지 여부를 결정하는데 사용되는 정수 표현에 사용된다.지정된 식별자가 이미 정의되어있는 경우, 그 값은 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