Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

Préprocesseur C et macros

Préprocesseur C et Macros

Dans ce didacticiel, vous découvrirez les préprocesseurs c et vous apprendrez à utiliser #include, #define et la compilation conditionnelle à l'aide d'exemples.

Le préprocesseur C est un préprocesseur de macro (permet de définir des macros) qui transforme votre programme avant qu'il ne soit compilé. Ces transformations peuvent être l'inclusion d'un fichier d'en-tête, d'extensions de macros, etc.

Toutes les directives de prétraitement commencent par un # symbole. Par exemple,

#define PI 3.14

Certaines des utilisations courantes du préprocesseur C sont :

Incluant les fichiers d'en-tête :#include

Le #include Le préprocesseur est utilisé pour inclure des fichiers d'en-tête dans les programmes C. Par exemple,

#include <stdio.h>

Ici, stdio.h est un fichier d'en-tête. Le #include La directive du préprocesseur remplace la ligne ci-dessus par le contenu de stdio.h fichier d'en-tête.

C'est la raison pour laquelle vous devez utiliser #include <stdio.h> avant de pouvoir utiliser des fonctions comme scanf() et printf() .

Vous pouvez également créer votre propre fichier d'en-tête contenant la déclaration de fonction et l'inclure dans votre programme à l'aide de cette directive de préprocesseur.

#include "my_header.h"

Visitez cette page pour en savoir plus sur l'utilisation des fichiers d'en-tête.

Macros utilisant #define

Une macro est un fragment de code auquel on donne un nom. Vous pouvez définir une macro en C en utilisant le #define directive du préprocesseur.

Voici un exemple.

#define c 299792458  // speed of light

Ici, lorsque nous utilisons c dans notre programme, il est remplacé par 299792458 .

Exemple 1 :#define préprocesseur

#include <stdio.h>
#define PI 3.1415

int main()
{
    float radius, area;
    printf("Enter the radius: ");
    scanf("%f", &radius);

    // Notice, the use of PI
    area = PI*radius*radius;

    printf("Area=%.2f",area);
    return 0;
}

Fonctionne comme des macros

Vous pouvez également définir des macros qui fonctionnent de la même manière qu'un appel de fonction. Ceci est connu sous le nom de macros de type fonction. Par exemple,

#define circleArea(r) (3.1415*(r)*(r))

Chaque fois que le programme rencontre circleArea(argument) , il est remplacé par (3.1415*(argument)*(argument)) .

Supposons que nous passions 5 comme argument, il se développe comme ci-dessous :

circleArea(5) expands to (3.1415*5*5)

Exemple 2 :Utilisation du préprocesseur #define

#include <stdio.h>
#define PI 3.1415
#define circleArea(r) (PI*r*r)

int main() {
    float radius, area;

    printf("Enter the radius: ");
    scanf("%f", &radius);
    area = circleArea(radius);
    printf("Area = %.2f", area);

    return 0;
}

Visitez cette page pour en savoir plus sur les macros et le préprocesseur #define.

Compilation conditionnelle

En programmation C, vous pouvez demander au préprocesseur d'inclure ou non un bloc de code. Pour ce faire, des directives conditionnelles peuvent être utilisées.

C'est similaire à un if déclaration avec une différence majeure.

Le if L'instruction est testée pendant le temps d'exécution pour vérifier si un bloc de code doit être exécuté ou non, tandis que les conditions sont utilisées pour inclure (ou ignorer) un bloc de code dans votre programme avant l'exécution.

Utilisations du conditionnel

  • utiliser un code différent selon la machine, le système d'exploitation
  • compiler le même fichier source dans deux programmes différents
  • pour exclure certains codes du programme mais pour les conserver comme référence à des fins futures

Comment utiliser le conditionnel ?

Pour utiliser le conditionnel, #ifdef , #if , #defined , #else et #elif directives sont utilisées.

Directive #ifdef

#ifdef MACRO     
   // conditional codes
#endif

Ici, les codes conditionnels sont inclus dans le programme uniquement si MACRO est défini.

Directives #if, #elif et #else

#if expression
   // conditional codes
#endif

Ici, expression est une expression de type entier (peut être des entiers, des caractères, une expression arithmétique, des macros, etc.).

Les codes conditionnels sont inclus dans le programme uniquement si l'expression est évalué à une valeur non nulle.

Le #else facultatif directive peut être utilisée avec #if directives.

#if expression
   conditional codes if expression is non-zero
#else
   conditional if expression is 0
#endif

Vous pouvez également ajouter des conditions imbriquées à votre #if...#else en utilisant #elif

#if expression
    // conditional codes if expression is non-zero
#elif expression1
    // conditional codes if expression is non-zero
#elif expression2
    // conditional codes if expression is non-zero
#else
    // conditional if all expressions are 0
#endif

#défini

L'opérateur spécial #defined est utilisé pour tester si une certaine macro est définie ou non. Il est souvent utilisé avec #if directives.

#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048
  // codes

Macros prédéfinies

Voici quelques macros prédéfinies en programmation C.

Macro Valeur
__DATE__ Une chaîne contenant la date actuelle
__FILE__ Une chaîne contenant le nom du fichier
__LINE__ Un entier représentant le numéro de ligne actuel
__STDC__ Si suit la norme ANSI C, alors la valeur est un entier différent de zéro
__TIME__ Une chaîne contenant la date actuelle.

Exemple 3 :obtenir l'heure actuelle à l'aide de __TIME__

Le programme suivant génère l'heure actuelle en utilisant __TIME__ macro.

#include <stdio.h>
int main()
{
   printf("Current time: %s",__TIME__);   
}

Sortie

Current time: 19:54:39

Lectures recommandées

  • Contrôle de ligne
  • Pragmas
  • Sortie du préprocesseur
  • Autres directives

Langue C

  1. Résumé R, L et C
  2. Mots-clés et identifiants C#
  3. Classe et objet C#
  4. Classe abstraite et méthode C#
  5. Classe partielle C# et méthode partielle
  6. Classe et méthode scellées C#
  7. Directives du préprocesseur C#
  8. Mots-clés et identifiants C
  9. C - Constantes et littéraux