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 :

Au sujet des constantes


Sujet :

Langage Delphi

  1. #1
    Membre confirmé
    Profil pro
    Administrateur système
    Inscrit en
    Mai 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur système

    Informations forums :
    Inscription : Mai 2002
    Messages : 144
    Par défaut Au sujet des constantes
    Une constante peut-elle correspondre au résultat d'une fonction? Quelqu'un aurait-il un exemple à me montrer?
    Dans mon cas, j'ai écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       const
           Const1 = Calcul ;
    Je précise que Const1 est une constatnte globale (définie en tout début de l'unité, dans l'interface) et que ma fonction Calcul est située dans une autre unité.
    Delphi me renvoit "Identificateur non déclaré: Calcul". Pourtant dans le bloc uses de chaque unité, j'ai déclaré l'autre. Je ne comprends pas ce qui cloche...

  2. #2
    Membre chevronné
    Avatar de hachesse
    Inscrit en
    Mars 2002
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 189
    Par défaut
    A priori, je pense que cela est impossible a faire

    extrait de la doc de delphi:
    La syntaxe de déclaration d'une vraie constante est :
    const identificateur = expressionConstante
    et qu'est ce qu'une expressionConstante

    extrait de la doc de delphi:
    Une expression constante est une expression que le compilateur peut évaluer sans exécuter le programme dans lequel se trouve la déclaration. Les expressions constantes sont : les nombres, les chaînes de caractères, les vraies constantes, les valeurs des types énumérés, les constantes spéciales True, False et nil ; et toutes les expressions construites exclusivement en utilisant ces éléments avec des opérateurs, des conversions de type et des constructeurs d'ensemble. Les expressions constantes ne peuvent contenir de variables, de pointeurs ou d'appels de fonction, sauf les fonctions prédéfinies suivantes :

    Abs
    Chr
    Hi High
    Length
    Lo Low
    Odd
    Ord Pred
    Round
    SizeOf Succ
    Swap
    Trunc
    Cette définition d'une expression constante intervient à plusieurs endroits dans la spécification de la syntaxe Pascal Objet. Les expressions constantes sont nécessaires à l'initialisation des variables globales, la définition de types intervalle, l'affectation de rang aux valeurs des types énumérés, la spécification de la valeur par défaut de paramètres, l'écriture d'instructions case et la déclaration de vraies constantes et de constantes typées.
    Or je n'y vois pas le mot fonction

  3. #3
    Membre émérite
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Par défaut
    En théorie, une constante ne peut pas être le résultat d'une fonction. Ce n'est pas son rôle. Si la valeur peut changer, c'est que ce n'est pas une constante mais une variable.
    En pratique, il est possible en Pascal Objet de modifier la valeur d'une constante. Je sais, ça parait bizarre mais c'est assez pratique quand on s'en sert correctement. Ces constantes spéciales sont les constantes typées. Un petit exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    const
      constantetypee : Integer = 0;
      constante = 0;
     
    begin
      constantetypee:= 2; // OK
      constante:= 2; // Message d'erreur du compilateur
    end;
    Vous trouverez plus d'infos sur les constantes dans l'aide (curseur sur const et F1).

  4. #4
    Membre confirmé
    Profil pro
    Administrateur système
    Inscrit en
    Mai 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur système

    Informations forums :
    Inscription : Mai 2002
    Messages : 144
    Par défaut
    Bon, voilà qui est clair. Merci infiniment pour cette mise au point.

  5. #5
    Nouveau candidat au Club
    Inscrit en
    Mai 2002
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 2
    Par défaut
    Bonjour à tous,

    Voici un extrait de l'aide en ligne :

    To declare a procedural constant, specify the name of a function or procedure that is compatible with the declared type of the constant. For example,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function Calc(X, Y: Integer): Integer;
     
    begin
     ...
    end;
     
    type TFunction = function(X, Y: Integer): Integer;
     
    const MyFunction: TFunction = Calc;
    Given these declarations, you can use the procedural constant MyFunction in a function call:
    You can also assign the value nil to a procedural constant.

    Cordialement,
    Fabrice.

  6. #6
    Membre émérite
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Par défaut
    Je ne vois pas trop à quoi peut servir un pointeur sur fonction constant. Il me semble que c'est strictement équivalent à une fonction. La seule différence que je puisse voir est que l'on peut modifier l'implémentation à la volée en affectant une autre fonction à la constante grâce justement au fait que c'est une constante typée.
    Il doit bien y avoir un intérêt, mais je n'arrive pas à le trouver... 8)

  7. #7
    Nouveau candidat au Club
    Inscrit en
    Mai 2002
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 2
    Par défaut
    Je ne vois pas non plus l’intérêt ! Si toutefois quelqu’un a une petite idée sur le sujet, merci de nous en faire part. C’est toujours sympa de se coucher un peu moins c..

    Cordialement,
    Fabrice.

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 17
    Par défaut
    C'est peut être bête et absurde ce que je vais dire mais c'est une idée : une constante ne prendrait-elle pas moins de mémoire qu'une variable?
    Cordialement, Gysmo

    [size=9]> Respectez les régles du forum.
    > Consultez le guide du developpeur Delphi devant un problème.
    > Participez à la F.A.Q Delphi !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 31
    Par défaut
    Je vais sûrement dire des bêtises mais pour moi une constante ne peut en aucun cas être modifiée :
    durant la compilation, c'est la valeur qui lui est associée qui est copiée dans le code à chaque endroit ou l'on utilise la constante.

    Maintenant, tous les autres types de constantes évoqués (typée, pointeur sur fonction constant etc ...) ne sont pas des "vraies" constantes mais des variables, de par leur comportement.

    Tout ça pour en venir à la mémoire :
    - pour une "vraie" constante : 0 octet, c'est dans le code
    - pour les autres, je ne sais pas.

Discussions similaires

  1. [ETUDES] [CNAM] Temoignages au sujet des UE
    Par pinocchio dans le forum Etudes
    Réponses: 40
    Dernier message: 06/02/2009, 22h03
  2. Réponses: 22
    Dernier message: 17/11/2007, 14h59
  3. [VB6][Tendance d'Excel] Calcul des constantes de l'equation
    Par ludotek dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 22/08/2005, 14h41
  4. Gestion des constantes
    Par valfredr dans le forum XMLRAD
    Réponses: 5
    Dernier message: 18/06/2003, 16h23
  5. Au sujet des mots de passe
    Par FranT dans le forum Langage
    Réponses: 6
    Dernier message: 17/09/2002, 22h16

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