Preprocessor, const, static, and enum · Préprocesseur, const, static et enum
What runs before the compiler
- Before the compiler sees your code, the preprocessor handles every line that starts with
#. - It pastes in headers, replaces macros, and removes comments — a simple text step.
- You have used it already:
#include <stdio.h>is a preprocessor command.
Ce qui précède le compilateur
- Avant que le compilateur ne voie votre code, le préprocesseur traite chaque ligne commençant par
#. - Il insère les en-têtes, remplace les macros et supprime les commentaires — une étape de texte simple.
- Vous l'avez déjà utilisé :
#include <stdio.h>est une commande préprocesseur.
#include and #define
#include <stdio.h>pastes the contents of a header so you can use its functions.#define PI 3.14159makesPIa macro: the preprocessor replaces everyPIwith that text.- Macros have no type and no semicolon — they are pure text replacement.
#include et #define
#include <stdio.h>insère le contenu d'un en-tête afin que vous puissiez utiliser ses fonctions.#define PI 3.14159transformePIen une macro : le préprocesseur remplace chaquePIpar ce texte.- Les macros n'ont ni type ni point-virgule — ce sont des remplacements de texte purs.
const vs #define
const double pi = 3.14159;is a real variable that cannot be changed. It has a type, so the compiler checks it.#define PI 3.14159is just text replacement, done before compiling.- Modern C usually prefers
constfor values, but#defineis still common for constants and flags.
const vs #define
const double pi = 3.14159;est une vraie variable qui ne peut pas être modifiée. Elle a un type, donc le compilateur le vérifie.#define PI 3.14159est simplement un remplacement de texte, effectué avant la compilation.- Le C moderne préfère généralement
constpour les valeurs, mais#definereste courant pour les constantes et les drapeaux.
static and enum
- A
staticvariable inside a function keeps its value between calls — it is set up once, not reset every time the function runs. - An
enumgives names to a set of relatedintvalues:enum Suit { HEARTS, DIAMONDS, CLUBS, SPADES };(hereHEARTSis0). - Both make code clearer:
staticfor memory that persists,enumfor named choices.
static et enum
- Une variable
staticà l'intérieur d'une fonction conserve sa valeur entre les appels — elle est initialisée une seule fois, pas réinitialisée à chaque exécution. - Un
enumdonne des noms à un ensemble de valeursintliées :enum Suit { HEARTS, DIAMONDS, CLUBS, SPADES };(iciHEARTSest0). - Les deux rendent le code plus clair :
staticpour la mémoire persistante,enumpour les choix nommés.
#include <stdio.h>
#define GREETING "Hello"
enum Color { RED, GREEN, BLUE };
int main(void) {
printf("%s\n", GREETING); // Hello
enum Color c = GREEN;
printf("%d\n", c); // 1
return 0;
}
Common mistakes
#definedoes plain text replacement — wrap macro bodies in parentheses.constcannot change; astaticlocal keeps its value between calls.
Erreurs courantes
#defineeffectue un remplacement de texte pur — enrobez les corps de macro entre parenthèses.constne peut pas changer ; une variable localestaticconserve sa valeur entre les appels.
Now you try
- Use the given
#defineandenumin the starters. - A
staticlocal variable remembers its value across calls. Do not write amain— the checker provides one.
À vous maintenant
- Utilisez les
#defineetenumfournis dans les amorces. - Une variable locale
staticretient sa valeur d'un appel à l'autre. Ne écrivez pas demain— le vérificateur en fournit un.
The · Le enum Suit { HEARTS, DIAMONDS, CLUBS, SPADES } is given. Complete const char *suit_name(enum Suit s) so it returns the name ("Hearts", "Diamonds", "Clubs", "Spades") using a switch. Do not · non write a main. · La enum Suit { HEARTS, DIAMONDS, CLUBS, SPADES } est donnée. Complétez const char *suit_name(enum Suit s) pour qu'il retourne le nom ("Hearts", "Diamonds", "Clubs", "Spades") en utilisant un switch. Ne pas écrire de main.
Click Run to see the output here. · Cliquez sur Exécuter pour voir le résultat ici.
A macro #define PI 3.14159265358979 is given. Complete double circle_area(double r) so it returns the area of a circle, PI * r * r, using the macro. Do not · non write a main. · Une macro #define PI 3.14159265358979 est donnée. Complétez double circle_area(double r) pour qu'il retourne l'aire d'un cercle, PI * r * r, en utilisant la macro. Ne pas écrire de main.
Click Run to see the output here. · Cliquez sur Exécuter pour voir le résultat ici.
Complete int next_id(void) using a static local counter, so the first call returns 1, the next 2, then 3, and so on. Do not · non write a main. · Complétez int next_id(void) en utilisant un compteur local static, afin que le premier appel retourne 1, le suivant 2, puis 3, etc. Ne pas écrire de main.
Click Run to see the output here. · Cliquez sur Exécuter pour voir le résultat ici.