Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Scope d'un #define

2 réponses
Avatar
Guillaume GOURDIN
Bonjour à tous,

une petite question : quel est le scope d'un #define? Est-il global, ou
uniquement celui des fichiers qui l'incluent? Autrement dit, puis-je
avoir 2 #define avec le même nom, et 2 valeurs différentes dans mon
code, à condition qu'ile en se "voient" pas?

Merci.

2 réponses

Avatar
Mickaël Wolff
Bonjour à tous,


Bonjour,

une petite question : quel est le scope d'un #define?


Je ne crois pas qu'on puisse parler de porté pour une instruction du
précompilateur.

Une variable ou une macro définies par un define, est valide dans le
fichier dans lequel il est déclaré, et dans les fichiers qui incluent le
fichier de déclaration.

toto.h
#define TOTO_H


toto.c
#ifdef TOTO_H

/* Code ignoré */
#endif

#include "toto.h"

#ifdef TOTO_H
/* Code considéré */
#endif


Bien sûr tu peux déclarer TOTO_H dans d'autres fichiers d'en-tête,
mais ça risque de devenir un beau bordel, car tu ne sauras plus quel
sera le contenu réel de TOTO_H.

En espérant avoir été assez clair (ce que je doute, c'est plus facile
avec un schéma à expliquer).
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Avatar
Michael DOUBEZ
Bonjour à tous,


Bonjour,

une petite question : quel est le scope d'un #define?


Je ne crois pas qu'on puisse parler de porté pour une instruction du
précompilateur.

Une variable ou une macro définies par un define, est valide dans le
fichier dans lequel il est déclaré, et dans les fichiers qui incluent le
fichier de déclaration.


Juste pour précision, il est possible de supprimer un #define par #undef.

#define FOO 1
#ifndef FOO
#error "FOO should be defined
#endif

#undef FOO
#ifdef FOO
#error "FOO should not be defined
#endif

Michael