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 :)
Version imprimable
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).Citation:
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 pratique;)Citation:
Envoyé 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.
Citation:
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 :
etCode:#define sqr(x) x*x
Code:#define sqr(x) (x)*(x)
encore raté, c'est:Et encore, attention aux effets de bord: c'est comme pour min et max...Code:#define sqr(x) ((x)*(x))
En effet:Citation:
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.Citation:
Envoyé par miron
Ce qui est constant c'est le type dans ce cas.Code:const double C=55.0;
Je sais qu'en C++ on peut ecrire ceci
Est-ce vrai aussi en c ???Code:const double const *C;
:oops: faudrait que je teste avant de parler ;)Citation:
Envoyé par seriousme
Citation:
Envoyé par gnto
...Citation:
Envoyé par DaZumba
Peut etre mais je suis pas le seul...
Peux-tu donner un exemple d'une variable de type non-constant ?Citation:
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.
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'adresseCode:
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 valeurCode:
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 constantCode:
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:
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çon :lol: béber sera fier de toi !!!
ma question était si cette écriture barbar
pouvait s'écire en C apparement oui !!Code:const type const pointer
et celle la peut-elle s'écrire en C ?
Code:type function (parameter) const ;
Code:const type * const pointer
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'estCitation:
Envoyé 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:#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: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.Citation:
Envoyé par DaZumba
"variable en lecture seule"Citation:
Envoyé par gnto
Peu importe, c'est la réalité. Tu peux dire "variable non modifiable" si tu préfères.
8O 8O Ca n'a aucun sens.Citation:
Ce qui est constant c'est le type dans ce cas.Code:const double C=55.0;
- 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 ?Citation:
Je sais qu'en C++
En C, ça n'a aucun sens. Tu veux peut être dire :Citation:
on peut ecrire ceci
Est-ce vrai aussi en c ???Code:const double const *C;
Là, c'est autre chose...Code:double const *const C;
Non. Double qualification -> erreur.Citation:
Envoyé par gnto
Non. Pas du C.Citation:
et celle la peut-elle s'écrire en C ?
Code:type function (parameter) const ;