Bonjour a tous ,
Je n’arrive pas a obtenir de definition claire pour ces 2 expressions . Pouvez vous m’eclairer s’il vous plait ?
Je vous remercie d’avance
Déjà, il faut préciser que tu parles de C, ou d’un de ses dérivés.
Le #define, ou “constante symbolique” est juste une convention pour rechercher et remplacer des éléments dans le code source lors de la précompilation.
C’est à dire que si tu mets un # define VRAI 1, partout où le préprocesseur verra VRAI, il remplacera par la chaine 1.
Une fois préprocessé, tu obtiens un code C sans directives, à plat, pret à compiler.
Le mot réservé const pour sa part est une instruction du langage qui >protège< une variable contre l’écriture/modification, mais ça reste une variable, qui a son espace mémoire réservé au moment de l’execution, et c’est pour ça qu’il faut la typer.
Daccord je comprends . Si j’ai :
#define N 40
#define P 80
L’expression:
int main {
N < P
Est une expression constante ?
Je ne comprends ni le bout de code (que tu pourrais mettre en forme pour qu’on comprenne mieux) ni la question.
Desolé de n’avoir pas été du tout claire .
Je n’ai pas le code entier , seulement :
#define N 40
#define P 80
Et ensuite j’ai une suite d’expression a titre d’exemple que l’on pourrai retrouver dans le main:
N<P
N==P
N<P?2:5
Toutes ces expressions sont des “expressions constantes” ?
Le preprocesseur remplace N et P avant la compilation ?
Oui N et P sont remplacé … Point
Et
const int valeur=10
valeur sera toujours égale à 10 dans ton programme logiquement tu ne pourra pas faire
Valeur=100 par la suite
Ok . Je vous remercie de votre aide .
Une expression constante est une expression dont le résultat peut être déterminé à la compilation.
Par contre je ne me souviens plus si le compilateur autorise à contourner const
avec un “cast” du genre
*(int *)&valeur=100
Si le compilateur l’autorise mais place la variable dans un segment de code non modifiable, ça risque de mal se passer à l’exécution.
Pareil, je ne sais plus trop.
Par contre, ce qu’il faut retenir, c’est qu’un #define n’est qu’une convention d’écriture, alors qu’un const désigne bien un espace mémoire (modifiable ou non).