Scope d'un #define

Le
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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Mickaël Wolff
Le #314031
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

Michael DOUBEZ
Le #314030
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


Publicité
Poster une réponse
Anonyme