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
Bonjour,

Je suis en train de comprendre l'usage de la variable #define; donc j'ai commencé par un exemple simple...j'ai un #define DEUX 2.
je veux que quand je lance mon programme, il affiche un "**" si c'est DEUX ou "***" si c'est TROIS

donc:
****************disque.c*****************
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#define DEUX 2
#define TROIS 3


int main(int argc, char *argv[])


printf("%d", argv[1]); ******IL LANCE LA POSITION EN MEMOIRE!!!!******
printf("%s",argv[1]); *****IL AFFICHE LA CHAINE "DEUX"**********

Comment je pourrai afficher en sortie la valeur de ma variable constant DEUX 2????

je veux une sortie comme celle ci:

>disque DEUX

**
>disque TROIS
***


Je présente mes excuses si mes questions sont bêtes. Je vous remercie pour votre aide!!!

Je ne comprends pas la nature de la variable #define, je ne sais pas comme je peux l'afficher

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
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
0
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
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 :
x = 2+3*2+3;
qui étant donner les priorités des opérateurs donnera 11 et non 25 comme on s'y attendrait.
0
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.
0
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
pour mieux répondre à la question :
if (strcmp(argv[1], "DEUX") == 0)
{
    printf("**\n");
}
else if (strcmp(argv[1], "TROIS") == 0)
{
    printf("***\n");
}
0
En effet, je n'avais pas totalement lu ce qui était demandé ;)
0