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 :

Problème de constante


Sujet :

Langage Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 487
    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 487
    Points : 3 120
    Points
    3 120
    Par défaut Problème de constante
    Bonjour

    Je suis un projet VCL et je trouve un truc bizarre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const
      CMAX_BITMAP_WIDTH = 1024 * 32;  // 32768
    Quand je passe mon curseur souris au-dessus du nom de la constante, Delphi annonce qu'il prend ça pour un SmallInt.
    Pourtant, le SmallInt va jusqu'à 32767

    Type entier d'étendue [-32768; 32767].

    Smallint est un entier signé sur 2 octets.
    Par contre si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CMAX_BITMAP_WIDTH = 32768;
    Il prend bien ça pour un Word

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 374
    Points : 3 152
    Points
    3 152
    Par défaut
    Bonjour,

    Sous Community 10.3.1 cela le fait aussi. C'est un bug, car a priori, il ne base sur le 1er nombre (1024)

    CMAX_BITMAP_WIDTH = 102400 * 33; renvoie un integer (mais calculé comme 3379200 dans la bulle)

    Je ne sais pas si cela impacte le programme ?

    A+
    Charly

  3. #3
    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
    L'EDI ne fait pas le calcul, c'est le compilateur qui s'en occupe. Il ne faut donc pas tenir compte du type des constantes en saisie, de toute façon elles seront remplacées par leur valeur lors de la compilation et c'est là qu'il y aura contrôle d'intégrité.

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 487
    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 487
    Points : 3 120
    Points
    3 120
    Par défaut
    et le fait qu'une constante typée ne soit plus considérée comme une constante, c'est aussi l'EDI qui est cause ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    const
      CMAX_BITMAP_WIDTH: Integer = 32768;
     
    type
      TArrayOfPixel = array [0 .. CMAX_BITMAP_WIDTH - 1] of TRGBTriple;
    Delphi pointe sur la déclaration du tableau:

    [dcc32 Erreur] uDGBitmap.pas(13): E2026 Expression constante attendue

  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 Papy214 Voir le message
    et le fait qu'une constante typée ne soit plus considérée comme une constante, c'est aussi l'EDI qui est cause ?
    Non, ça c'est une fonctionnalité.

    Typed constants cannot occur in constant expressions.
    http://docwiki.embarcadero.com/RADSt...ared_Constants

  6. #6
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 487
    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 487
    Points : 3 120
    Points
    3 120
    Par défaut
    Je vais me coucher moins bête ce soir.

    Du coup, si j'écris comme ça, ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    const
      CMAX_BITMAP_WIDTH = Integer(32768); //1024 * 32;  // 32768
     
    type
      TArrayOfPixel = array [0 .. CMAX_BITMAP_WIDTH - 1] of TRGBTriple;
    Et le survol à la souris renvoie bien le bon type.

    Merci.

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

Discussions similaires

  1. Problème de constante
    Par moimp dans le forum Langage
    Réponses: 2
    Dernier message: 27/02/2019, 20h32
  2. [ZF 1.11] Problème de constante avec Zend et JS
    Par rajia dans le forum Zend Framework
    Réponses: 6
    Dernier message: 07/01/2012, 10h59
  3. Réponses: 2
    Dernier message: 05/11/2010, 11h38
  4. Problème avec constantes php
    Par asthyanax dans le forum Langage
    Réponses: 2
    Dernier message: 25/06/2007, 14h49
  5. problème de constante !
    Par shadowmic dans le forum C
    Réponses: 6
    Dernier message: 25/08/2006, 17h09

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