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

Langage Delphi Discussion :

Constantes et CASE


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Femme Profil pro
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 93
    Points
    93
    Par défaut Constantes et CASE
    Bonjour à tous,

    Petite question que je me pose, est-ce que quelqu'un peut m'expliquer pourquoi le code suivant compile et fonctionne très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    Const
         MA_CONST_1 = 1;
         MA_CONST_2 = 2;
         MA_CONST_3 = 3;
         MA_CONST_4 = 4;
     
    Var
       MaVariable : Integer;
     
    begin
         MaVariable:=StrToInt(Edit1.Text);
     
         Case MaVariable Of
         MA_CONST_1 : ShowMessage('A');
         MA_CONST_2 : ShowMessage('B');
         MA_CONST_3 : ShowMessage('C');
         MA_CONST_4 : ShowMessage('D');
         End;
    end;
    Alors que celui-ci ne se compile pas (Erreur : Expression constante attendue):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Const
         MA_CONST_1 : Integer = 1;
         MA_CONST_2 : Integer = 2;
         MA_CONST_3 : Integer = 3;
         MA_CONST_4 : Integer = 4;
     
    Var
       MaVariable : Integer;
     
    begin
         MaVariable:=StrToInt(Edit1.Text);
     
         Case MaVariable Of
         MA_CONST_1 : ShowMessage('A');
         MA_CONST_2 : ShowMessage('B');
         MA_CONST_3 : ShowMessage('C');
         MA_CONST_4 : ShowMessage('D');
         End;
    end;
    La seule différence étant de définir un type spécifique pour les constantes.
    J'ai toujours l'habitude de définir le type de mes constantes mais du coup là je ne peux pas. est-ce que ça change quelque chose?

    (Bien entendu, l'utilité du code est bidon, c'est juste pour reproduire le phénomène)

    Merci d'avance.

    LaNono

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Les constantes typées sont considérées comme des variables non modifiables par le compilateur alors que les constantes non typées sont remplacées par leur valeur.

  3. #3
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Tiens, je suis pas le seul à avoir été confronté à ça

    Je considère pourtant que ça reste une bizarrerie de Delphi ...

  4. #4
    Membre régulier
    Femme Profil pro
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 93
    Points
    93
    Par défaut
    Merci beaucoup pour vos explications.

    C'est effectivement assez bizarre comme fonctionnement. On va faire avec

  5. #5
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Citation Envoyé par Nono23 Voir le message
    Merci beaucoup pour vos explications.

    C'est effectivement assez bizarre comme fonctionnement. On va faire avec
    Si tu veux forcer le type, fais le transtypage des valeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const
      a = 5; // constante
      b: integer = 5; // variable non modifiable
      c = integer(5); // constante typée et reconnue comme constante

  6. #6
    Membre régulier
    Femme Profil pro
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 93
    Points
    93
    Par défaut
    Ah oui super, merci pour l'astuce.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. case expressions must be constant expressions
    Par semaj_james dans le forum Langage
    Réponses: 9
    Dernier message: 17/07/2007, 18h28
  2. Case et constantes typées
    Par Rayek dans le forum Delphi
    Réponses: 7
    Dernier message: 14/02/2007, 15h40
  3. case non constant
    Par jul54 dans le forum MFC
    Réponses: 4
    Dernier message: 04/02/2004, 15h08
  4. [ADO] Constantes des types de champ
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/09/2002, 12h08
  5. Au sujet des constantes
    Par FranT dans le forum Langage
    Réponses: 8
    Dernier message: 09/08/2002, 12h03

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