Les Allergies
Alimentaires
Posez votre question Signaler

Const & #define

meriama_s 101Messages postés 13 octobre 2005Date d'inscription - Dernière réponse le 12 oct. 2007 à 17:03
bonjour tout le monde

quelle est la difference entre

#define nc 3 et const nc=3
Lire la suite 

Const & #define »

3 réponses
Réponse
+0
moins plus
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
meriama_s- 27 mars 2006 à 19:09
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
?
Ajouter un commentaire
Réponse
+0
moins plus
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 .
Ajouter un commentaire
Ce document intitulé « const & #define » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?