Const & #define

meriama_s Messages postés 99 Statut Membre -  
 ohm11F -
bonjour tout le monde

quelle est la difference entre

#define nc 3 et const nc=3

2 réponses

  1. jisisv Messages postés 3678 Statut Modérateur 936
     
    Je suppose que tu parles ici du langage C.
    #define te définit une macro: du texte sue le préprocesseur C va remplacer dans le corps de ton source,
    const est un modificateur qui indique qu'une variable, un paramètre de fonction est en lecture seule
    Exemple
    johand@horus:~/src/c$ cat defconst.c
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    #define PI 4*atan(1.0)
    
      int main(void)
    {
      float const deux=2.0;
      printf(\"e^(-pi/2)= %f
    \" , expf(-PI/2));
      printf(\"e^2= %f
    \", expf(deux));
      return 0;
    }
    

    Preprocessing:
    johand@horus:~/src/c$ gcc  -E  defconst.c |grep -A6 'main(void)'
      int main(void)
    {
      float const deux=2.0;
      printf(\"e^(-pi/2)= %f
    \" , expf(-4*atan(1.0)/2));
      printf(\"e^2= %f
    \", expf(deux));
      return 0;
    }
    

    On compile et vérifie l'output:
    johand@horus:~/src/c$ gcc  -o brol defconst.c -lm
    johand@horus:~/src/c$ ./brol
    e^(-pi/2)= 0.207880
    e^2= 7.389056
    

    La variable deux est immuable:
    johand@horus:~/src/c$ cat defconst.c
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    #define PI 4*atan(1.0)
    
      int main(void)
    {
      float const deux=2.0;
      printf(\"e^(-pi/2)= %f
    \" , expf(-PI/2));
      printf(\"e^2= %f
    \", expf(deux));
    
      deux = 3.0;
    
      return 0;
    }
    johand@horus:~/src/c$ gcc  -o brol defconst.c -lm
    defconst.c: In function 'main':
    defconst.c:11: error: assignment of read-only variable 'deux'
    


    Johan
    0
    1. meriama_s Messages postés 99 Statut Membre
       
      merci
      oui je parle du language de programmtion c
      je vous remerci bcp pour votre reponse

      mais ce que je veux savoir exactement c'est:
      pour #define n 3 (par exemple) ;le preprocesseur remplace le symbole n par la valeur 3 partout dans le programme et que la valeur de la variable n est inchangeable
      et si on fait n=n+1(par exemple) on aura des erreurs dans la compilation
      donc même si on essaye de changer la valeur de n elle reste inchanger.

      si ce que je dit est faux dit le moi!
      et ce que je voulais savoir si est ce que c'est le cas aussi pour const n=3
      ?
      0
  2. ohm11F
     
    Bonjour,

    A priori et en toute logique et pour n = n+1 en cas de define : n sera remplacer par 3 partout donc le compilo vera à cette ligne 3=3+1 .. mais je ne sais pas ce qu'il en fera exactement ??? ...

    dans le cas de declaration sous forme de constante : n etant en lecture seul, le compilateur renvera probablement un warning lors de la compil et le proposition sera fausse, soit (n=n+1)==0 sera VRAI car n+1 n'aurra pas pu e^tre stoqué dans n ! (en C 0 est faux et !0 est vrai)
    j'espere que ca t'eclairera .
    0