Variable #define

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

  1. Contributeur
    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
    1. Contributeur
      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
      1. 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
        1. Contributeur
          pour mieux répondre à la question :
          if (strcmp(argv[1], "DEUX") == 0)
          {
              printf("**\n");
          }
          else if (strcmp(argv[1], "TROIS") == 0)
          {
              printf("***\n");
          }
          0
        2. En effet, je n'avais pas totalement lu ce qui était demandé ;)
          0