Le préprocesseur
De ZbahWiki.
(Page créée avec « Le NXC possède également un pré-processeur qui est modelé à partir du préprocesseur C standard. Le préprocesseur C traite un fichier de code source avant le compilateu... »)
Version actuelle en date du 4 avril 2011 à 16:36
Le NXC possède également un pré-processeur qui est modelé à partir du préprocesseur C standard. Le préprocesseur C traite un fichier de code source avant le compilateur. Il gère des tâches telles que l'inclusion de code à partir d'autres fichiers, conditionnellement inclusion ou l'exclusion des blocs de code, la suppression des commentaires, la définition de macros simples et paramétrables, et l'expansion des macros partout où ils sont rencontrés dans le code source.
Le préprocesseur NXC met en œuvre les directives suivantes préprocesseur standard: #include, #define, #ifdef, #ifndef, #endif, #if, #elif, #undef, ##, #line, #error, et #pragma.
Elle supporte également deux directives non-standard: #download et #import.
Tout écart important sont expliqués ci-dessous.
Sommaire |
#include
La commande #include fonctionne comme dans la norme C, avec la différence que le nom du fichier doit être entre guillemets. Il n'y a pas de notion d'un système de chemin d'inclusion, de sorte que mettre un nom de fichier entre crochets est interdit.
#include "foo.h" // ok #include <foo.h> // erreur!
#include "NXCDefs.h"
Ce fichier d'en-tête de série comprend de nombreuses constantes importantes et les macros, qui forment le noyau de l'API NXC. Le NXC n'ont plus besoin que vous incluiez manuellement le fichier d'entête NXCDefs.h. À moins que vous disiez au compilateur d'ignorer les fichiers du système standard, ce fichier d'entête est inclus automatiquement.
#define
La commande #define est utilisée pour la substitution macro. La redéfinition d'une macro se traduira par un avertissement du compilateur. Les macros sont normalement limitées à une ligne car le caractère de nouvelle ligne à la fin de la ligne agit comme un terminateur. Toutefois, vous pouvez écrire des macros multilignes en chargeant le préprocesseur d'ignorer le caractère de nouvelle ligne. Ceci est accompli en échappant au caractère de nouvelle ligne avec une barre oblique inverse ('\'). Le caractère barre oblique inverse doit être le caractère tout dernier dans la ligne ou ne sera pas étendre la définition de la macro à la ligne suivante. L'exemple de code ci-dessous montre comment écrire une macro du préprocesseur multi-ligne.
#define ELEMENT_OUT(n) \ NumOut(0, LCD_LINE##n, b##n) bool b1 = false; bool b2 = true; task main() { ELEMENT_OUT(1); ELEMENT_OUT(2); Wait(SEC_2); }
C'est la même chose qu'écrire :
bool b1 = false; bool b2 = true; task main() { NumOut(0, LCD_LINE1, b1); NumOut(0, LCD_LINE2, b2); Wait(SEC_2); }
Compilation conditionnelle
La compilation conditionnelle fonctionne de manière similaire à la compilation conditionnelle du préprocesseur C.
Les directives de préprocesseur suivantes peuvent être utilisés:
Directives | Signification |
---|---|
#ifdef symbole | Si symbole est défini compiler le code qui suit |
#ifndef symbole | Si symbole n'est pas défini compiler le code qui suit |
#else | Passe de compiler à ne pas compiler et vice versa |
#endif | Retourne à l'état précédent de compilation |
#if condition | Si la consdition est vraie, le code qui suit est compilé |
#elif condition | Comme un #else contenant un #if |
#import
La directive #import vous permet de définir un tableau d'octets ( variable globale ) dans votre programme NXC qui contient le contenu du fichier importé.
Comme #include, cette directive est suivie d'un nom de fichier joint entre guillemets.
Après le nom du fichier, vous pouvez éventuellement inclure une chaîne de caractère comme nom de la variable que vous souhaitez définir en utilisant cette directive.
#import "monfichier.txt" data
Par défaut, la chaîne qui suit est s ce qui signifie que le nom du fichier sera le nom de la variable. Par exemple, si nom de la variable "data" n'est pas précisée comme dans l'exemple ci-dessus, le nom de la variable tableau d'octets serait "monfichier". Dans notre cas, le nom de la variable tableau d'octets seront "data". La directive #import est souvent utilisé avec les fonction GraphicArrayOut et GraphicArrayOutEx.
#download
La directive #download fonctionne en conjonction avec le compilateur pouvant télécharger.
Il vous permet d'indiquer au compilateur de télécharger un fichier spécifié auxiliaire en plus du fichier .RXE produit à partir de votre code source. Si l'extension de fichier correspond à un type de code source et que le compilateur sait comment le compiler (tels que .rs ou .NBC), le compilateur va d'abord compiler le code source avant de télécharger le binaire résultant. Le nom du fichier à télécharger (et éventuellement compiler) est mit entre guillemets doubles à la suite de la directive. Si le compilateur dit seulement de compiler le code source d'origine, alors la directive #download est ignorée.
#download "myfile.rs" #download "mypicture.ric"