Tableau en #define

Résolu
boudafc Messages postés 48 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 18 juillet 2008 - 29 avril 2008 à 09:22
boudafc Messages postés 48 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 18 juillet 2008 - 29 avril 2008 à 10:15
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

cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
29 avril 2008 à 09:50
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
3
boudafc Messages postés 48 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 18 juillet 2008
29 avril 2008 à 10:15
oui,
c'est vrai que j'avais fais l'amalgame, je pensais que mes #define devaient être systématiquement entre "" alors que non.

merci.
0
boudafc Messages postés 48 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 18 juillet 2008
29 avril 2008 à 09:25
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....
-1