Bonjour,
Je débute un peu en C et je n'ai pas bien compris la différence entre
#define C 55.0;
et
const double C=55.0;
Dans quels cas vaut-il mieux utiliser l'un ou l'autre ??
Merci pour vos éclaircissements![]()
Bonjour,
Je débute un peu en C et je n'ai pas bien compris la différence entre
#define C 55.0;
et
const double C=55.0;
Dans quels cas vaut-il mieux utiliser l'un ou l'autre ??
Merci pour vos éclaircissements![]()
Il me semble que const ... est en fait une variable en lecture seule, et qui en passant par des pointeur peu etre modifié quand meme!!!(graves erreur par la suite surement).Envoyé par Tittom
Alors que define, doit vraiement etre une constante;
Enfin a verifier.
A mon avis utilise sans aucun doute DEFINE (en plus si besoin est de modifier, c'est en haut du document donc pratiqueEnvoyé par Tittom
![]()
(il se pourais qu'il y ait un probleme au niveau de ta constante, si tu veux choisir char ou int etc...)
La question sur la difference entre const et #define est souvent posee. Ce sont deux concepts differents.
- #define definit des constantes au moment de la compilation. Elle est geree par le preprocesseur.
- #define ne definit pas directement une variable
- const qualifie une variable comme etant 'en lecture seule', i.e. sa valeur n'est pas sensee etre modifiee. Comme toute variable, elle possede un type et occupe un emplacement memoire (i.e. on peut en prendre l'adresse et stocker cette adresse dans un pointeur).
Donc, utilise const pour profiter du type checking et pointer vers la variable cree. Utilise #define dans les cas ou une const ne convient pas, comme pour dimensionner un tableau ou lister les cas possibles d'un switch.
Envoyé par DaZumba
exact, d'ailleurs cela pose parfois des problèmes incompréhensibles pour ceux qui l'ignorent
du genre quelle la différence entre :
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part #define sqr(x) x*x
Code : Sélectionner tout - Visualiser dans une fenêtre à part #define sqr(x) (x)*(x)
encore raté, c'est:Et encore, attention aux effets de bord: c'est comme pour min et max...
Code : Sélectionner tout - Visualiser dans une fenêtre à part #define sqr(x) ((x)*(x))
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
En effet:Envoyé par Médinoc
#define sqr(x) (x)*(x)
...
1./sqr(2) => 1./(2)*(2) =>1. != 1./(2*2)=0.25
Une variable en lecture seul, le terme n'est pas élégant.Envoyé par miron
Ce qui est constant c'est le type dans ce cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part const double C=55.0;
Je sais qu'en C++ on peut ecrire ceci
Est-ce vrai aussi en c ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part const double const *C;
Envoyé par gnto
...Envoyé par DaZumba
Peut etre mais je suis pas le seul...
Peux-tu donner un exemple d'une variable de type non-constant ?Envoyé par gnto
const double var; ou double const var; signifie la meme chose.
Pour un pointeur, il y a en effet une finesse: on peut vouloir que le pointeur _et_ sa valeur (i.e. l'adresse d'une autre variable de meme type) soient constants. Donc const double *ptr; et const double const *ptr; ne signifient pas exactement la meme chose.
Si : le deuxième const est du mauvais coté de l'étoile.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Les closes de constances, ne sont pas toujours bien gérées par les compilateurs. Par exemple sous gcc 3.2, le fait d'outrepasser le const ne donne que des avertissements, et le code fonctionne quand même!
C'est la valeur qui est contante
C'est la valeur pointée qui est contante on peu changer l'adresse
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 const type variable = valeur; const int i = 3; //On ne peut plus changer i
C'est l'adresse qui est constante on peut changer la valeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 const type variable = valeur; const type * pointeur = &variable; const int i = 3; /*ou*/ int i=3; const int j = 2; cont int * p_i = &i; //on ne peut plus changer la valeur de i via le pointeur p_i = &j; //possible
Tout est constant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 type variable = valeur; type * const pointeur = &variable; int i = 3; int * const p_i = &i; //Le pointeur ne peut plus pointer sur un autre entier *p_i = 4; //possible
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 const type variable = valeur; /*ou*/ type variable1 = valeur. const type * const pointeur = &variable; //On ne peut plus rien modifier via le pointeur
T'as bien appris ta leçonbéber sera fier de toi !!!
ma question était si cette écriture barbar
pouvait s'écire en C apparement oui !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part const type const pointer
et celle la peut-elle s'écrire en C ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part type function (parameter) const ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part const type * const pointer
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
En effet ça peut s'écrire en C. (comme le dit medinoc, pense à l'étoile avant le const).
Par contre une fonction const n'a de sens qu'en c++, puisque cela signifie qu'elle ne modifie pas les données membres de la classe à laquelle elle appartient.
Déjà, c'estEnvoyé par Tittom
#define n'est pas une instruction C (donc pas de ';'), mais une instruction 'préprocesseur', c'est à dire un outil de substitution de texte. A chaque fois qu'il y aura C dans le texte, il sera remplacé par l'expression correspondante 55.0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part #define C 55.0
Alors que
définit une variable à lecture seule (non modifiable) nommée C et donc la valeur est 55.0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part const double C=55.0;
On utilise la variable si on a besoin de l'adresse de celle-ci. Sinon, le define suffit.
Dans le dernier cas, ce doit être un type int exclusivement.Envoyé par DaZumba
"variable en lecture seule"Envoyé par gnto
Peu importe, c'est la réalité. Tu peux dire "variable non modifiable" si tu préfères.
Ce qui est constant c'est le type dans ce cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part const double C=55.0;![]()
Ca n'a aucun sens.
- Rien ici n'est constant (une expression constante en C, c'est quelque chose de bien précis. 'const' n'a rien à voir avec conastsnt. C'est une façon curieuse et raccourcie d'écrire 'readonly'.
- La variable qui est non modifiable.
En quoi ?Je sais qu'en C++En C, ça n'a aucun sens. Tu veux peut être dire :on peut ecrire ceci
Est-ce vrai aussi en c ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part const double const *C;
Là, c'est autre chose...
Code : Sélectionner tout - Visualiser dans une fenêtre à part double const *const C;
Non. Double qualification -> erreur.Envoyé par gnto
Non. Pas du C.et celle la peut-elle s'écrire en C ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part type function (parameter) const ;
Partager