Tableau en #define

[Résolu]
Signaler
Messages postés
48
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
18 juillet 2008
-
Messages postés
48
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
18 juillet 2008
-
Bonjour,
je souhaite pouvoir définir dans un #define tout le contenu d'un tableau comme suit:
#define CHAMPS ""TOTO", "TATA", "TITI""

et dans mon code:
char tabChamps[][512] = {CHAMPS}; 

tout ceci pour que l'utilisateur n'ait qu'à modifier le define dans le *.h et pas à aller chercher une ligne dans le code pour modifier le contenu du tableau...

problème, lorsque je fais:
printf("%s\n", tabChamps[0]);
j'obtient:
"TOTO", "TATA", "TITI"
et non TOTO

quelqu'un sait pourquoi ? car normalement à la compilation tout le code est remplacé par le define...

Sinon, comment faire pour faire la même chose de manière aussi "simple" ou plutôt transparente à l'utilisation ?

merci.

3 réponses

Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
Bonjour,

Il est tout à fait normal que #define CHAMPS "TOTO", "TATA", "TITI" soit bon ! CHAMPS est défini avec le contenu exact de ce qui doit apparaître entre les accolades. Le préprocesseur se contente de faire une substitution exacte avec les #define.

Dans #define CHAMPS ""TOTO", "TATA", "TITI"", les 3 éléments sont transformés en une seule chaîne de caractères ! Il n'y a donc que tabChamps[0] qui soit initialisé. Ne pas confondre le guillemet d'encadrement de chaîne (") et le guillemet qui doit apparaître tel quel dans une chaîne (").

Jean-François
Messages postés
48
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
18 juillet 2008

oui,
c'est vrai que j'avais fais l'amalgame, je pensais que mes #define devaient être systématiquement entre "" alors que non.

merci.
Messages postés
48
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
18 juillet 2008

Bon, malgrès les différents tests que j'avais fait avant de poster, j'ai trouvé la solution (qui me semblait pourtant peu probable...)
il faut faire:
#define CHAMPS "TOTO", "TATA", "TITI"

tout simplement. ceci pourra peut-être en aider certains un jour ou l'autre....