Latest web development tutorials

C préprocesseur

Une partie de lapréprocesseur C est pas le compilateur, mais il est le processus de compilation d' une étape distincte.En bref, préprocesseur C est juste un outil de substitution de texte seulement, ils vont demander au compilateur de compiler un prétraitement complet avant le besoin réel. Nous préprocesseur C (C préprocesseur) abrégé en RPC.

Toutes les commandes sont pré-processeur avec un signe dièse (#) au début. Il doit être le premier caractère non-blanc, afin d'améliorer la lisibilité, les directives de préprocesseur doit commencer dans la première colonne. Ci-dessous sont toutes les instructions importantes pré-processeur:

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

Des exemples de pré-processeur

Analyse de comprendre les exemples suivants des instructions différentes.

#define MAX_ARRAY_LENGTH 20

Cette directive indique RPC pour remplacer tous les MAX_ARRAY_LENGTH 20. Utilisez#definepour définir des constantes pour améliorer la lisibilité.

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

Ces instructions indiquent le RPC stdio.h obtenir de labibliothèque système, et ajouter du texte dans le fichier source de courant.La ligne suivante indique RPCmyheader.h obtenir à partir du répertoire local et ajouter du contenu dans le fichier source de courant.

#undef  FILE_SIZE
#define FILE_SIZE 42

Cette commande indique RPC annuler FILE_SIZE définie, et la définir comme 42.

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

Cette commande indique RPC uniquement lorsque MESSAGE undefined uniquement lorsque défini MESSAGE.

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

Cette commande indique au RPC si vous définissez DEBUG, puis effectue la déclaration de traitement. Au moment de la compilation, si vous passez commutateur-DDEBUGau compilateur gcc, cette commande est utile. Il définit DEBUG, vous pouvez toujours activer ou désactiver le débogage lors de la compilation.

macros prédéfinies

ANSI C définit un certain nombre de macros. Dans la programmation, vous pouvez utiliser ces macros, mais différent de modifier directement ces macros prédéfinies.

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

Essayons les exemples suivants:

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

}

Lorsque le code ci - dessus (dans le fichiertest.c) sont compilé et exécuté, il produit les résultats suivants:

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

opérateur préprocesseur

C préprocesseur fournit les opérateurs suivants pour vous aider à créer une macro:

La poursuite de la macro opérateur (\)

Une macro est généralement écrite sur une seule ligne. Cependant, si la macro est trop longue pour tenir sur une seule ligne, utilisez la poursuite de macro opérateur (\). Par exemple:

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

opérateur littéraux chaîne de quantification (#)

Dans les définitions de macro, lorsque vous avez besoin de mettre un argument macro dans une constante de chaîne, l'opérateur de quantification constante de cordes (#). Macro en utilisant l'opérateur a un paramètre ou un paramètre liste spécifique. Par exemple:

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

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Carole and Debra: We love you!
opérateur de collage de jeton (de ##)

opérateur de collage de jeton (de ##) dans la définition de la macro va fusionner les deux paramètres. Il permet à deux balises de définition de macro indépendantes sont combinées en une étiquette. Par exemple:

#include <stdio.h>

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

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

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

token34 = 40

Voici comment cela est arrivé, parce que cet exemple va produire la sortie réelle suivante du compilateur:

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

Cet exemple montre le jeton ## n se connecte à token34 ici, nous avons utilisél'opérateur de chaîne constante de quantification (#), et l' opérateur de collagedejeton (##).

défini) opérateur (

opérateur préprocesseurDéfini est utilisé dans une expression constante utilisée pour déterminer si un identificateur a été défini en utilisant le #define.Si l'identifiant spécifié est déjà défini, la valeur est vrai (non nul). Si l'identifiant spécifié est pas défini, la valeur est fausse (zéro). L'exemple suivant illustre le () l'utilisation de l'opérateur défini:

#include <stdio.h>

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

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

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Here is the message: You wish!

macro Parameterized

RPC est une fonctionnalité puissante peut être utilisée pour simuler la fonction macro paramétrés. Par exemple, le code suivant est de calculer le carré d'un nombre:

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

Nous pouvons utiliser une macro pour réécrire le code ci-dessus, comme suit:

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

Avant d' utiliser des macros avec des paramètres, vous devez utiliserune directive #define.Liste des paramètres est mise entre parenthèses, et doit être immédiatement derrière le nom de la macro. Un espace entre le nom de la macro et la parenthèse gauche n'est pas autorisé. Par exemple:

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

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Max between 20 and 10 is 20