Latest web development tutorials

C preprocessore

Parte delpreprocessore C non è il compilatore, ma è il processo di compilazione di una fase separata.In breve, C preprocessore è solo uno strumento di sostituzione di solo testo, che istruirà il compilatore per compilare completa pretrattamento prima della effettiva necessità. Noi C preprocessore (C preprocessore) abbreviato come CPP.

Tutti gli ordini sono pre-processore con un cancelletto (#) all'inizio. Deve essere il primo carattere non vuoto, al fine di migliorare la leggibilità, le direttive del preprocessore dovrebbe iniziare nella prima colonna. Di seguito sono elencati tutti gli importanti istruzioni pre-processore:

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

Esempi di pre-processore

Analisi per capire i seguenti esempi istruzioni diverse.

#define MAX_ARRAY_LENGTH 20

Questa direttiva dice CPP per sostituire tutti i MAX_ARRAY_LENGTH 20. Utilizzare#defineper definire le costanti per migliorare la leggibilità.

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

Queste istruzioni dicono al CPP stdio.h ottenere dallalibreria di sistema, e aggiungere del testo al file di origine corrente.La riga successiva dice CPPmyheader.h ottenere dalla directory locale e aggiungi contenuto al file sorgente corrente.

#undef  FILE_SIZE
#define FILE_SIZE 42

Questo comando dice CPP annullare FILE_SIZE definito, e definirlo come 42.

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

Questo comando dice CPP solo quando MESSAGGIO undefined solo se definita MESSAGGIO.

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

Questo comando dice CPP se si definisce DEBUG, quindi esegue dichiarazione di trasformazione. Al momento della compilazione, se si passa interruttore-DDEBUGal compilatore gcc, questo comando è utile. Esso definisce DEBUG, si può sempre attivare o disattivare il debug durante la compilazione.

macro predefinite

ANSI C definisce un certo numero di macro. Nella programmazione, è possibile utilizzare queste macro, ma diverso per modificare direttamente queste macro predefinite.

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

Proviamo i seguenti esempi:

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

}

Quando il codice sopra (nel filetest.c) sono compilato ed eseguito, produce i seguenti risultati:

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

operatore preprocessore

C preprocessore fornisce i seguenti operatori per aiutare a creare una macro:

La continuazione di operatore macro (\)

Una macro di solito è scritto su una sola riga. Tuttavia, se la macro è troppo lungo per essere contenuto in una sola riga, utilizzare la continuazione dell'operatore macro (\). Ad esempio:

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

operatore letterali stringa di quantizzazione (#)

Nel definizioni di macro, quando è necessario mettere un argomento macro in una stringa costante, la stringa costante dell'operatore quantizzazione (#). Macro utilizzando l'operatore ha un parametro o un parametro specifico elenco. Ad esempio:

#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;
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Carole and Debra: We love you!
operatore incollare Token (##)

operatore incollare Token (##) nella definizione della macro si fonderanno i due parametri. Esso consente a due tag di definizione di macro indipendenti sono combinati in un tag. Ad esempio:

#include <stdio.h>

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

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

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

token34 = 40

Questo è quanto è accaduto, perché questo esempio produce il seguente output reale dal compilatore:

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

Questo esempio dimostra il token ## n collega al token34 qui, abbiamo utilizzato lastringa dell'operatore costante di quantizzazione (#), e l'operatore incollare Token (##).

operatore definito ()

operatore preprocessoredefinito viene utilizzato in un'espressione costante utilizzato per determinare se un identificatore è stato definito utilizzando il #define.Se l'identificatore specificato è già definito, il valore è true (diverso da zero). Se l'identificatore specificato non è definito, il valore è falso (zero). L'esempio che segue illustra l'definita) utilizzo (operatore:

#include <stdio.h>

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

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

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Here is the message: You wish!

macro con parametri

CPP è una potente funzione può essere utilizzata per simulare con parametri funzione macro. Ad esempio, il codice seguente è calcolare il quadrato di un numero:

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

Possiamo usare una macro per riscrivere il codice precedente, come segue:

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

Prima di utilizzare le macro con i parametri, è necessario utilizzareuna direttiva # define.Lista dei parametri è racchiuso tra parentesi, e deve essere immediatamente dietro il nome della macro. Uno spazio tra il nome della macro e la parentesi di sinistra non è permesso. Ad esempio:

#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;
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Max between 20 and 10 is 20