Variable #define
Fermé
maria_silva
Messages postés
13
Date d'inscription
samedi 18 juin 2011
Statut
Membre
Dernière intervention
27 février 2012
-
22 août 2011 à 03:30
Info - 22 août 2011 à 11:23
Info - 22 août 2011 à 11:23
3 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
22 août 2011 à 08:52
22 août 2011 à 08:52
Bonjour,
Pour info, #define ne permet pas la creation de variable.
Pour l'adresse mémoire, il vaut mieux mettre %p que %d.
pour le reste, je comprends pas ce que tu veux faire.
Google is your friend
Pour info, #define ne permet pas la creation de variable.
Pour l'adresse mémoire, il vaut mieux mettre %p que %d.
pour le reste, je comprends pas ce que tu veux faire.
Google is your friend
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
22 août 2011 à 10:02
22 août 2011 à 10:02
Salut. Il faut bien comprendre que les directives de #define sont des directives de précompilation (c'est à dire AVANT la compilation).
Ces directives sont stupides et donc à éviter au maximum. Ce que fait le préprocesseur : il lit ton code source, tombe sur l'instruction #define DEUX 2, et continue à lire le code source en sachant que dès qu'il rencontrera la chaine de caractère "DEUX" il la remplacera par "2". Voilà, ni plus ni moins. Une fois arriver à la fin du fichier il passe le résultat au compilateur.
Si tu veux voir le code généré par le précompilateur, utilise l'option -E de gcc.
L'exemple hyper classique du problème des macros, c'est la "macro" qui met au carré :
#define sqr(x) x*x
alors si dans le source tu tapes x=srq(2+3); tu auras comme résultat 11, car le préprocesseur écrira :
Ces directives sont stupides et donc à éviter au maximum. Ce que fait le préprocesseur : il lit ton code source, tombe sur l'instruction #define DEUX 2, et continue à lire le code source en sachant que dès qu'il rencontrera la chaine de caractère "DEUX" il la remplacera par "2". Voilà, ni plus ni moins. Une fois arriver à la fin du fichier il passe le résultat au compilateur.
Si tu veux voir le code généré par le précompilateur, utilise l'option -E de gcc.
L'exemple hyper classique du problème des macros, c'est la "macro" qui met au carré :
#define sqr(x) x*x
alors si dans le source tu tapes x=srq(2+3); tu auras comme résultat 11, car le préprocesseur écrira :
x = 2+3*2+3;qui étant donner les priorités des opérateurs donnera 11 et non 25 comme on s'y attendrait.
if (strcmp(argv[1], "DEUX") == 0) { printf("%d\n", DEUX); } else if (strcmp(argv[1], "TROIS") == 0) { printf("%d\n", TROIS); }
En gros, voici la méthode. Faire un define ne signifie pas créer une variable globale, loin de là. Mais ça a été expliqué plus haut donc je ne vais pas te refaire le cours ;)
si tu veux définir une globale, tu la déclares en dehors d'une fonction, tout simplement.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
22 août 2011 à 11:06
22 août 2011 à 11:06
pour mieux répondre à la question :
if (strcmp(argv[1], "DEUX") == 0) { printf("**\n"); } else if (strcmp(argv[1], "TROIS") == 0) { printf("***\n"); }