Const & #define
meriama_s
Messages postés
99
Statut
Membre
-
ohm11F -
ohm11F -
bonjour tout le monde
quelle est la difference entre
#define nc 3 et const nc=3
quelle est la difference entre
#define nc 3 et const nc=3
2 réponses
-
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
Exemplejohand@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-
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
?
-
-
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 .