Const & #define
Fermé
meriama_s
Messages postés
99
Date d'inscription
jeudi 13 octobre 2005
Statut
Membre
Dernière intervention
20 août 2008
-
26 mars 2006 à 17:41
ohm11F - 12 oct. 2007 à 17:03
ohm11F - 12 oct. 2007 à 17:03
2 réponses
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
946
27 mars 2006 à 05:32
27 mars 2006 à 05:32
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 .
27 mars 2006 à 19:09
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
?