Référence rapide

Antisèche des macros et directives du préprocesseur C (cpp)

Guide de référence rapide pour le préprocesseur C (cpp) : inclusion de fichiers d'en-tête, macros, concaténation de tokens (##), stringification (#) et compilation conditionnelle.

· Publié le

Référence rapide de syntaxe pour le préprocesseur C (cpp), exécutable séparément ou au sein de la chaîne de compilation C/C++.

Préprocesseur autonome

Exécuter le préprocesseur directement sans appeler le compilateur :

# -P supprime la génération des marqueurs de lignes
cpp -P source.c > preprocessed.c

Inclusions de fichiers d'en-tête

#include <stdio.h>      /* En-têtes système et bibliothèque standard */
#include "my_header.h"  /* En-têtes locaux du projet */

Définitions de macros

#define BUFFER_SIZE 1024
#define PI 3.1415926535

/* Supprimer la définition d'une macro */
#undef BUFFER_SIZE

Macros de type fonction

#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define DEG_TO_RAD(x) ((x) * 0.0174532925)

Stringification (#)

L'opérateur unique # convertit les paramètres de macro en chaînes de caractères :

#define STR(name) #name
#define PRINT_VAR(x) printf("%s = %d\n", #x, x)

char *var_name = STR(my_object);  /* → "my_object" */

Concaténation de tokens (##)

L'opérateur double ## assemble deux tokens en un seul :

#define COMMAND(NAME) { #NAME, NAME ## _command }

struct command commands[] = {
  COMMAND(quit),   /* → { "quit", quit_command } */
  COMMAND(help)    /* → { "help", help_command } */
};

Compilation conditionnelle

#ifdef DEBUG
  #define LOG(msg) printf("[DEBUG] %s\n", msg)
#elif defined(VERBOSE)
  #define LOG(msg) printf("[INFO] %s\n", msg)
#else
  #define LOG(msg) /* noop */
#endif

/* Gardes d'inclusion (Include guards) */
#ifndef MY_HEADER_H
#define MY_HEADER_H

/* déclarations ici */

#endif /* MY_HEADER_H */

Diagnostics et avertissements

#if __STDC_VERSION__ < 201112L
  #warning "C11 features are not fully enabled"
#endif

#if !defined(REQUIRED_CONFIG)
  #error "REQUIRED_CONFIG must be defined before compilation"
#endif

Macros standard prédéfinies

  • __FILE__: Nom du fichier source actuel sous forme de chaîne.
  • __LINE__: Numéro de la ligne courante sous forme d'entier.
  • __DATE__: Date de compilation sous forme de chaîne (Mmm dd yyyy).
  • __TIME__: Heure de compilation sous forme de chaîne (hh:mm:ss).

Sujets associés