IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

utilisation de constantes


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 31
    Points : 15
    Points
    15
    Par défaut utilisation de constantes
    Bonjour.

    Quelle est l'utilité d'utiliser des constantes dans un programme en C ?

    Comment les utiliser ?

    Merci de l'aide.

  2. #2
    Membre averti Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Points : 382
    Points
    382
    Par défaut
    deja on les appelle constantes parceque elles ne changent pas au cours de l'execution du programme .
    on peut les declarer soit :
    imaginons qu'on veuille creer une constante MAX egale a 3
    ou bien
    comme tu a remarque pour differencier les constantes des variable la majorite utilisent les majuscules .
    pour l'utilite :
    - deja sa permet de verifier si ta variable ne change pas accidentellement au cours du programme .
    - imaginons que tu utilise plusieurs fois le chiffre 4 dans le programme , et que tu change d'avis et que tu veut utiliser 5 et bien l'avantage de declarer une constante est de t'eviter de fouiller dans ton code pour trouver le chiffre 4 et le remplacer par 5 , alors qu'il suffisais juste de changer la constante .
    en esperant t'avoir aide

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Oui c'est tout bon!

    Merci beaucoup!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    juste encore une chose: que signifie cela: 'A' ??

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Le caractère A majuscule, ou plus précisément son code.
    • En ASCII, ASCII étendu et Unicode, 'A' correspond à 65.
    • En EBCDIC, aucune idée.
    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.

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 373
    Points : 23 629
    Points
    23 629
    Par défaut
    Citation Envoyé par elmcherqui Voir le message
    comme tu a remarque pour differencier les constantes des variable la majorite utilisent les majuscules .
    pour l'utilite :
    Attention ! Tu confonds les macros et les constantes. Ce n'est PAS DU TOUT la même chose !

    - deja sa permet de verifier si ta variable ne change pas accidentellement au cours du programme .
    Pour cela, tu utiliseras plutôt les facilités de ton debugger, qui est prévu, entre autres choses, pour suivre la valeur des registres de ton choix.

    - imaginons que tu utilise plusieurs fois le chiffre 4 dans le programme , et que tu change d'avis et que tu veut utiliser 5 et bien l'avantage de declarer une constante est de t'eviter de fouiller dans ton code pour trouver le chiffre 4 et le remplacer par 5 , alors qu'il suffisais juste de changer la constante .
    Et s'il n'a déclaré que des constantes, ça lui apporte quoi ?

    D'une part, donc, les noms écrits en majuscules servent généralement à représenter les macros définies avec #define. Celles-ci peuvent éventuellement représenter, à leur tour, des variables, des constantes ou, le plus souvent, les valeurs elles-mêmes. Ces macros sont entièrement résolues par le précompilateur et n'existent plus en tant que telles dans le code final.

    En revanche, une constante en C va être bâtie exactement comme une variable, donc elle aura un emplacement en mémoire (et on pourra mettre un pointeur dessus également). Les raisons de définir une constante plutôt qu'une variables sont les suivantes :

    - Lorsque les données qu'elle contient ne peuvent ou ne doivent être modifiées.
    - Pour que le compilateur puisse les placer dans un segment de mémoire en lecture seule (sur certains systèmes, la RAM est une ressource précieuse et limitée).
    - De façon à conserver leur nature lorsque ces constantes sont impliquées dans des expressions très compliquées.

    Un exemple typique de constante implicite est la chaîne de caractères entre guillemets :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    const char * chaine = "Hello world";
    .

    La chaîne est retrouvée par son emplacement, mais les caractères qu'elle contient ne peuvent être modifiés, et son type doit donc être défini en conséquence.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    - Lorsque les données qu'elle contient ne peuvent ou ne doivent être modifiées.
    - Pour que le compilateur puisse les placer dans un segment de mémoire en lecture seule (sur certains systèmes, la RAM est une ressource précieuse et limitée).
    - De façon à conserver leur nature lorsque ces constantes sont impliquées dans des expressions très compliquées.


    pour la 1ere je dirai que c'est toi qui code tu fait gaffe c'est tout...


    pour la 2ème je suis parfaitement d'accord mais une question persiste: de toutes fassons ta constante est dans la mémoire(RAM)? c'est bien le système (sous windows c'est le PEloader) qui charge l'éxécutable d'ou moin une partie en mémoire réel(l'autre étant dans la mémoire virtuelle) et qui décide qu'elle partie sera en lecture seule lecture/ecriture ou sera la pile etc... non?

    pour la 3eme revenir a la 1ere

    Pour moi, l'opérateur const est pratique que pour la deuxieme raison...

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par lapinoudu33 Voir le message
    de toutes façons ta constante est dans la mémoire(RAM)? <...>
    Non.
    • Une constante est dans le code, associée au code machine
    • Une variable à lecture seule est probablement dans un segment de mémoire à lecture seule
    • Une variable lecture/écriture est dans un segment de mémoire à lecture/écriture.

    C'est à peu près tout ce qu'on peut dire. Le reste dépend de l'implémentation.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par lapinoudu33 Voir le message
    pour la 1ere je dirai que c'est toi qui code tu fait gaffe c'est tout...

    pour la 3eme revenir a la 1ere
    Un compilateur décent correctement configuré te signalera si tu tentes de modifier une "constante". de ce fait la remarque de Obsidian est tout a fait pertinente.

    Je rajouterais que l'utilisation du mot clé const pour les "variables constantes" a en outre un effet documentaire non négligeable.

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gl Voir le message
    Je rajouterais que l'utilisation du mot clé const pour les "variables constantes" a en outre un effet documentaire non négligeable.
    Je préfère le terme 'variables à lecture seule', car il s'agit bien d'une variable (ou objet, qui a donc une adresse).

    Une constante n'a pas d'adresse.
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 373
    Points : 23 629
    Points
    23 629
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Je préfère le terme 'variables à lecture seule', car il s'agit bien d'une variable (ou objet, qui a donc une adresse).
    C'est un problème de sémantique : pour les programmeurs, « variable » = « registre ». En fait, c'est plutôt l'un qui induit l'autre. Il faut un registre pour contenir la valeur qui peut varier. C'est le terme « variable » lui-même qui est, dès lors, inapproprié.

    Pour les mathématiciens algébristes, une variable est un terme d'une expression qui peut varier. C'est d'ailleurs cette différence d'approche qui cause tant de tracas aux néophytes, spécialement à l'abord des pointeurs ...

    Maintenant, j'utilise moi-même, et comme tout le monde, les « const » pour faire du read-only dans un contexte donné, mais ce n'est qu'un moindre mal : une constante ne peut pas être naturellement transtypée en variable, mais une variable peut être transmise comme une constante (qui peut le plus peut le moins). C'est très bien mais sémantiquement incorrect, encore une fois : une donnée réputée constante n'a a priori besoin d'être lue qu'une seule fois.

    Si l'on reprend le prototype de printf(), par exemple, le premier paramètre est censé être un pointeur vers des caractères constants. À ce titre, on pourrait très bien envisager une fonction printf() spéciale qui maintienne une mémoire cache des chaînes déjà écrites et qui les rebalance quand elle reconnaît un pointeur qui est déjà passé, le contenu étant censé être garanti invariable par « const ».

    Ceci rejoint ce que tu dis, mais les deux mots-clés devraient exister à mon goût.

    Une constante n'a pas d'adresse.
    Euh, si ! Ou alors, on ne parle pas de la même chose. Tu peux retrouver l'adresse d'une constante avec « & » comme pour une variable. De même, l'emplacement d'une donnée réputée invariable peut très bien être public.

    L'exemple-type est les chaînes de caractères entre guillemets : les caractères qui la composent ne peuvent jamais être modifiés, mais il est quand même nécessaire que l'on puisse pointer dessus.

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    C'est un problème de sémantique : pour les programmeurs, « variable » = « registre ».
    Gné ? Quel rapport avec un registre ?

    En fait, c'est plutôt l'un qui induit l'autre. Il faut un registre pour contenir la valeur qui peut varier. C'est le terme « variable » lui-même qui est, dès lors, inapproprié.
    Une variable mémoire peut très bien varier directement. Ca dépend des processeurs...
    Euh, si ! Ou alors, on ne parle pas de la même chose. Tu peux retrouver l'adresse d'une constante avec « & » comme pour une variable. De même, l'emplacement d'une donnée réputée invariable peut très bien être public.

    L'exemple-type est les chaînes de caractères entre guillemets : les caractères qui la composent ne peuvent jamais être modifiés, mais il est quand même nécessaire que l'on puisse pointer dessus.
    Ce texte est une exemple flagrant, voire caricatural, de confusion entre constante et variable à lecture seule...

    Le mot clé 'const' du C est une source de confusion bien connue (en Java : 'final', je ne sais pas si c'est mieux...).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #define readonly const
     
    char readonly *s = "Hello";
    C'est mieux comme ça ?

    Par contre une constante n'a pas d'adresse...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int *pa = &123;
    int *pb = &'A';
    int *pc = &NULL;
    ne compile pas.
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 373
    Points : 23 629
    Points
    23 629
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Gné ? Quel rapport avec un registre ?
    Un « registre », d'une manière générale, est n'importe quoi qui puisse contenir et conserver une valeur, voire même une information, au sens large, quand on sort du domaine de l'informatique.

    En C, le mot-clé « registrer » se réfère aux registres du processeur, mais ce n'est qu'un cas particulier. Ce n'était pas mes propos.

    Ce texte est une exemple flagrant, voire caricatural, de confusion entre constante et variable à lecture seule...
    C'est surtout que tu n'as pas bien lu mon post, comme souvent : en fait, on est d'accord.

    Mon point de vue est que lorsque des termes choisis tournent au jargon, ça devient dangereux. Les mots « variable à lecture seule » n'ont tout simplement pas de sens si ladite variable est à lecture seule pour tout le monde (dispositifs électroniques compris), pour la simple raison que la variable ne serait justement jamais variable.

    Mais comme je le disais plus haut, quand on dit le mot « variable », tous les programmeurs se figurent en premier lieu le registre qui contient la valeur, plutôt que la nature de la valeur elle-même, et c'est en ce sens que le mot « variable » est inapproprié. Pourquoi le font-ils ? Parce que la plupart des langages ne font pas le distingo, et que la seule manière de retenir localement une donnée est de créer une variable.

    C'est spécialement vrai dans les langages interprétés où tout ce qui est « equates » occupe quand même des ressources.

    Le mot clé 'const' du C est une source de confusion bien connue (en Java : 'final', je ne sais pas si c'est mieux...).
    Non, ce n'est pas beaucoup mieux, en effet.

    Je pense surtout que même en y portant le plus grand soin, on ne peut pas inventer à la base, du premier jet, le langage idéal.

    Je pense réellement qu'au moment de poser sur le papier les bases du langage C, ses concepteurs ont d'abord eu à l'idée de distinguer variables et constantes au sens mathématique du terme, pour que cela apparaisse dans les prototypes et soit géré comme tel, ainsi que pour classer les données dans les bons segments de mémoire. Je ne crois pas que l'objectif premier ait été la protection en écriture, comme sur les disques, ne serait-ce que parce que, dans le cas contraire, le mot-clé aurait tout de suite été nommé correctement.

    Toujours la même chose : problème d'interprétation.

    Pour moi, une variable ou une constante sont matérialisées par des symboles qui se substituent aux valeurs qu'elles représentent.

    « x » est (généralement) une variable.
    « pi » est une constante.

    'A' est la représentation d'une valeur. Ce n'est en soi ni une constante ni une variable à ce stade. Comme tu le signales au-dessus, ce n'est pas non plus un objet logiciel, dans le sens où cette déclaration ne crée pas d'instance de cette valeur. Mais une constante, elle, peut très bien être instanciée.

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Un « registre », d'une manière générale, est n'importe quoi qui puisse contenir et conserver une valeur, voire même une information, au sens large, quand on sort du domaine de l'informatique.
    Ici, on est informatique (et même, en langage C!) et ce dont tu parles s'appelle d'une manière générale la mémoire ou un élément de mémoire.

    C'est surtout que tu n'as pas bien lu mon post, comme souvent : en fait, on est d'accord.
    Je ne crois pas, non. Tu me dis qu'une constante a une adresse. C'est faux.

    Mon point de vue est que lorsque des termes choisis tournent au jargon, ça devient dangereux.
    En C, il y a les variables et les constantes. Ce sont 2 choses différentes. Les variables qualifiée 'const' ne sont pas des constantes. C'est clair ?

    Les variables (ou objets) ont une adresse (sauf les champs de bits).
    Les constantes (ou expression constantes) n'ont pas d'adresse.
    Point.

    Y'a pas à chercher des interprétations tordues. Il suffit de lire la norme.

    Les mots « variable à lecture seule » n'ont tout simplement pas de sens. Si

    C'est une variable qui a une adresse et dont l'accès ne se fait qu'en lecture.

    Je rappelle qu'il peut exister des variables à lecture /écriture
    sur lesquelles on peut définir un pointeur n'autorisant que la lecture.
    ou plus vraisemblablement :
    avec
    Ca ne signifie en aucun cas que la valeur pointée est une constante. Ca signifie simplement que dans le contexte de cette fonction, je n'ai pas le droit de la modifier. (Ce qui à mon sens, devrait être le cas général, le droit d'écriture devant être exceptionnel et contrôlé...)
    Mais comme je le disais plus haut, quand on dit le mot « variable », tous les programmeurs se figurent en premier lieu le registre
    Je ne sais pas au nom de quels programmeurs tu parles, mais je ne vois pas ce que la notion de registre vient faire ici... Une variable (ou objet) est un élément de la mémoire, c'est tout. Elle contient une combinaison de bits qui représente une valeur dont la sémantique dépend de l'utilisateur. Elle a une adresse unique et constante (l'adresse est une constante) dans la machine pendant sa durée de vie.

    qui contient la valeur, plutôt que la nature de la valeur elle-même,
    Ce que j'appelle la sémantique de la combinaison de bits appelée valeur. Comme déjà expliqué, elle dépend de l'utilisateur (en fait de la spec) et elle n'a rien à voir avec la variable qui est le contenant (la valeur étant le contenu).

    et c'est en ce sens que le mot « variable » est inapproprié.
    On peut toujours s'amuser à redéfinir le sens des mots. Tu préfères 'objet' ?

    Pourquoi le font-ils ? Parce que la plupart des langages ne font pas le distingo, et que la seule manière de retenir localement une donnée est de créer une variable.
    Tu as toi même associé les mots 'retenir' (grâce à l'effet mémoire) et 'variable'. Une variable est donc bien une portion de mémoire qui contient une donnée (ou valeur).
    C'est spécialement vrai dans les langages interprétés où tout ce qui est « equates » occupe quand même des ressources.
    Ce qui se passe ailleurs m'intéresse peu... En C, une constante n'occupe aucune mémoire. C'est garanti.

    Je pense réellement qu'au moment de poser sur le papier les bases du langage C, ses concepteurs ont d'abord eu à l'idée de distinguer variables et constantes au sens mathématique du terme, pour que cela apparaisse dans les prototypes et soit géré comme tel, ainsi que pour classer les données dans les bons segments de mémoire. Je ne crois pas que l'objectif premier ait été la protection en écriture, comme sur les disques, ne serait-ce que parce que, dans le cas contraire, le mot-clé aurait tout de suite été nommé correctement.
    Les concepteurs du C (1973) n'ont pas inventé const. Ce sont les normalisateurs de 1989/1990 qui l'ont inventé.
    Toujours la même chose : problème d'interprétation.
    Euh non. La norme est très clair. 'A' est une constante, comme 123 ou 0xFF.

    Pour moi, une variable ou une constante sont matérialisées par des symboles qui se substituent aux valeurs qu'elles représentent.
    Une variable est une objet qui reçoit une valeur. La valeur elle même peut être matérialisée par une symbolique qui en facilite l'exploitation.

    'B', 123, 12.3, (void*)0, NULL etc.

    Attention avec "hello" dont le sens exact varie beaucoup avec le contexte.

    « x » est (généralement) une variable.
    « pi » est une constante.
    Bah, non. Ca dépend comment elle sont définies...

    int x = 0; /* variable */
    int const x = 0; /* variable */
    enum {x = 0}; /* constante */
    #define x 0 /* constante */

    pareil avec pi...

    'A' est la représentation d'une valeur.
    Oui. C'est ça une constante.

    Mais une constante, elle, peut très bien être instanciée.
    Non. Une constante n'a pas d'adresse. Une instance est un objet mémoire. Elle a donc forcément une adresse, ce n'est donc pas une constante mais une variable.

    Tu continues de confondre variable et constante.

    Relis ton cours de C.
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En C, une constante n'occupe aucune mémoire. C'est garanti.
    Ahem! Aucune mémoire de données. Elle occupe forcément une place dans la mémoire de code.
    Mais si elle est assez petite, il est possible qu'elle n'occupe même pas un byte entier (comme la valeur immédiate de l'instruction ADDQ du M68k, qui ne peux prendre que les valeurs de 1 à 8 (oui, 1 à 8, car on n'ajoute pas zéro), donc juste trois bits)... Dans ce cas-là, il apparait parfaitement clair que la constante n'a pas d'adresse.
    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.

  16. #16
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 373
    Points : 23 629
    Points
    23 629
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ahem! Aucune mémoire de données. Elle occupe forcément une place dans la mémoire de code.
    Mais si elle est assez petite, il est possible qu'elle n'occupe même pas un byte entier (comme la valeur immédiate de l'instruction ADDQ du M68k, qui ne peux prendre que les valeurs de 1 à 8 (oui, 1 à 8, car on n'ajoute pas zéro), donc juste trois bits)... Dans ce cas-là, il apparait parfaitement clair que la constante n'a pas d'adresse.
    Et encore, là aussi, on peut jouer sur les mots. Si la constante a servi à dimensionner un tableau par exemple, la valeur elle-même ne se trouve pas dans le code. À contrario, on peut définir des champs de bits dans des structures, instanciées en mémoire de données volatile ...

  17. #17
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 373
    Points : 23 629
    Points
    23 629
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Ici, on est informatique (et même, en langage C!)
    Ce n'est pas une raison pour être approximatif.

    En C, il y a les variables et les constantes. Ce sont 2 choses différentes. Les variables qualifiée 'const' ne sont pas des constantes. C'est clair ?
    Non. Je pense que tu te trompes.

    M'enfin, ce n'est pas bien grave. Je n'ai pas à coeur de te convaincre. Il est tard, j'attendrai que tu me lises à tête reposée.

    Les variables (ou objets) ont une adresse. Les constantes (ou expression constantes) n'ont pas d'adresse. Point.
    C'est sur ces définitions que nos avis divergent.

    Y'a pas à chercher des interprétations tordues. Il suffit de lire la norme.
    Ouais, ouais, ouais.
    Chaque fois que ça devient un peu difficile, c'est le même refrain : « c'est comme çà, ne cherche pas à comprendre ».

    Apprendre la norme par coeur ne suffit pas, il faut se servir de sa tête quelque fois et faire preuve d'un peu de bon sens.

    Je ne sais pas au nom de quels programmeurs tu parles, mais je ne vois pas ce que la notion de registre vient faire ici...
    Alors ... relis mon post (ou bien ouvre un dictionnaire) !

    Ce n'est pas parce que le mot-clé « register » en C désigne spécifiquement les registres du processeur que c'est une généralité en informatique. C'est un terme répandu et bien défini. Essaie de maîtriser ta langue avant de maîtriser le C.

    Ce qui se passe ailleurs m'intéresse peu...
    Tout le problème vient de là, à mon avis. 'faut sortir un peu.
    Y a des définitions qui existaient avant le C, et qui existent à côté !

    Les concepteurs du C (1973) n'ont pas inventé const. Ce sont les normalisateurs de 1989/1990 qui l'ont inventé.
    Ce qui ne change rien.

    Euh non. La norme est très clair. 'A' est une constante, comme 123 ou 0xFF.

    ...

    Une constante n'a pas d'adresse. Une instance est un objet mémoire. Elle a donc forcément une adresse, ce n'est donc pas une constante mais une variable. Tu continues de confondre variable et constante.
    Cent lignes pour dire la même chose. J'hallucine !

    De toutes façons, ce n'était même pas l'objet de post initial. Donc, je vais résumer en trois lignes ce dialogue de sourds :

    1) Le mot-clé « const » est abusif ;
    2) À la place, tu proposes « variable à lecture seule » ;
    3) Je faisais remarquer qu'en fait, c'est le terme « variable » lui-même qui est inapproprié.

    C'était difficile ?

  18. #18
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par Obsidian
    <...>
    Si la constante a servi à dimensionner un tableau par exemple, la valeur elle-même ne se trouve pas dans le code
    <...>
    pourtant avec :
    en assembleur j'écrirais :
    dans le code machine 9 apparaîtra ( elle a donc une adresse puisqu'elle est stockée quelque part ), cela dit si c'était le compilateur il n'écrirait certainement pas 9 ( pour des raisons d'alignement de données ? ). je me trompe ?
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  19. #19
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 373
    Points : 23 629
    Points
    23 629
    Par défaut
    Citation Envoyé par ssmario2 Voir le message
    pourtant avec :
    en assembleur j'écrirais :
    dans le code machine 9 apparaîtra ( elle a donc une adresse puisqu'elle est stockée quelque part ), cela dit si c'était le compilateur il n'écrirait certainement pas 9 ( pour des raisons d'alignement de données ? ). je me trompe ?
    Effectivement, dans ce sens-là, on la retrouve quand même.

  20. #20
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Je préfère le terme 'variables à lecture seule', car il s'agit bien d'une variable (ou objet, qui a donc une adresse).

    Une constante n'a pas d'adresse.
    La valeur de cette constante est bien stockée quelques parts non ? Elle a donc une adresse ! mais bon il n'y a pas moyen d'y accéder et je ne vois pas à quoi cela pourrait servir.

    EDIT : Vous vouliez peut être dire 'non adressable' ?
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

Discussions similaires

  1. [JSTL] <c:if> Utilisation de constantes static
    Par ncachet dans le forum Taglibs
    Réponses: 3
    Dernier message: 30/01/2007, 14h32
  2. Utiliser une constante dans un texte
    Par 78alex78 dans le forum Langage
    Réponses: 1
    Dernier message: 08/01/2007, 15h23
  3. [utilisation de constante] erreur C2051
    Par ZaaN dans le forum C++
    Réponses: 3
    Dernier message: 06/11/2006, 13h17
  4. [XSLT] utilisation de constantes.
    Par the_edge dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/08/2006, 12h49
  5. Utiliser une constante dans une requête
    Par Nabouille dans le forum Access
    Réponses: 4
    Dernier message: 19/04/2006, 13h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo