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
Exemple
Preprocessing:
On compile et vérifie l'output:
La variable deux est immuable:
Johan
#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
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 .
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 .
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
?