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++Builder Discussion :

utilité de __fastcall dans les fonctions?


Sujet :

C++Builder

  1. #1
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 309
    Points
    1 309
    Par défaut utilité de __fastcall dans les fonctions?
    Bonjour a tous,

    une question toute bête: A quoi sert exactement __fastcall? est-il utile? Faut t'il le mettre aussi pour les fonction que l'on creer soit même?

    Je sais que les fonction créee automatiquement par l'envirronnement contiennent toutes __fastcall :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /***************************************************************************/
    void __fastcall TFPrinc::BtnQuitClick(TObject *Sender)
    /***************************************************************************/
    {
       Close();
    }
    Lorsque je crée une fonction a moi, je ne met pas __fastcall, est-ce grave?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /***************************************************************************/
    void  TFPrinc::MaFonction( int MonParametre)
    /***************************************************************************/
    {
       // TO DO
    }
    Merci a ceux qui voudront bien m'éclairer sur ce fameux __fastcall, et me dire quand l'utilise / quand ne pas l'utiliser!

    Merci !
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Points : 288
    Points
    288
    Par défaut
    salut ,

    je pense que c'est une option de compilation pour garder les parametres de la fonction en cache pour etre réutiliser rapidement !!!!!!!!!!
    « Aucun homme ne peut rien vous révéler sinon ce qui repose déjà à demi endormi dans l'aube de votre connaissance»

    « No man can reveal to you aught but that which already lies half asleep in the dawning of your knowledge »_(¯`·.__-Alg3ri4nH4ck3r-__.·´¯)_

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Points : 288
    Points
    288
    Par défaut
    c'est bien détaillé dans les FAQ de c++builder ici
    « Aucun homme ne peut rien vous révéler sinon ce qui repose déjà à demi endormi dans l'aube de votre connaissance»

    « No man can reveal to you aught but that which already lies half asleep in the dawning of your knowledge »_(¯`·.__-Alg3ri4nH4ck3r-__.·´¯)_

  4. #4
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 309
    Points
    1 309
    Par défaut
    Ok, merci!

    Je crois que j'ai plus qu'a ajouté __fastcall pour toutes mes fonctions!

    [pour info pour ceux qui tomberont ici, le lien precis est celui-ci ]






    ----------------
    blog : http://fc-feldkirch1984.over-blog.org
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  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 518
    Points
    41 518
    Par défaut
    J'en profite pour mettre l'accent sur le fait que ça ne soit pas toujours utile.
    Quelques détails ici (ici, c'est pour le __fastcall 16 bits microsoft, mais les "problèmes" sont les mêmes) : http://blogs.msdn.com/oldnewthing/ar.../02/47184.aspx
    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
    Candidat au Club
    Profil pro
    Chef de projet et consultant
    Inscrit en
    Août 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet et consultant

    Informations forums :
    Inscription : Août 2005
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Le sujet date mais pour précision l'utilisation de __fastcall oblige le compilateur à utiliser les registres pour transmettre les paramètres.

    A++

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    En plus, il date et la réponse est comme l'a signalé dz_robotix est dans la
    Que signifie __fastcall ?
    Et aussi incroyable que cela peut l'être, c'est aussi dans l'aide _fastcall, __fastcall

    A savoir surtout que c'est la convention d'appel standard des méthodes de classe en Delphi !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    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 518
    Points
    41 518
    Par défaut
    Et en .Net.
    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.

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    En .NET ?
    fastcall serait la convention par défaut en .NET ?
    Ah, je ne savais pas, je pensais que c'était plutôt safecall
    En même temps, l'inventeur du C# étant l'inventeur du Delphi, logique qu'il ait repris certains mécanismes éprouvés !

    Seul Delphi a eu une variante .NET abandonnée depuis quelques années, aujourd'hui c'est un Plug-In dans VisualStudio : Delphi Prism

    la seule convention d'appel du .NET que j'ai implicitement utilisé doit être l'équivalent du SafeCall du COM lors que l'on fait une Assembly supportant l'Interop ou pour utiliser un Code Non-Managé comme un ActiveX en Delphi pouvant être utilisé en .NET ou via VBS

    Comme le .NET est un système cross-platform, dans un code managé, on ne devrait pas se préoccuper de la convention d'appel, déjà sous windows cela diffère entre 32 et 64 bits, est-ce que cela diffère selon l'OS ?

    Dans un code Non-Managé, il y a les mêmes conventions qu'en C++, heureusement à ce sujet, ils se sont accordés pour utiliser les mêmes noms pour les mêmes choses !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    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 518
    Points
    41 518
    Par défaut
    Je ne connais pas du tout safecall. À ma connaissance, COM utilise __stdcall (avec un #define STDMETHODCALLTYPE dessus), sauf pour des fonctions variadiques où __cdecl est utilisé à la place (avec un #define STDMETHODVCALLTYPE dessus)

    Pour __fastcall et .Net, ce n'est pas une garantie, bien sûr.
    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.

  11. #11
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 164
    Points : 356
    Points
    356
    Par défaut
    Perso, je mets seulement "__fastcall" quand je suis obligé, par exemple pour les méthodes read/write associées à une propriété. Y en a déjà assez à taper!

    D'ailleurs, l'un des grands mystères que je n'ai toujours pas élucidé:: le "__fastcall" qui précède les destructeurs de la VCL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    __fastcall virtual ~TComponent(void);
    Y a pas de paramètres!!!

    ps: elle est trop bonne ta signature, medinoc, je t'ai ajouté un point.

  12. #12
    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 518
    Points
    41 518
    Par défaut
    Il y a toujours this comme premier paramètre.

    Un autre problème est que __fastcall diffère d'un compilo à l'autre. Celui de Microsoft est différent de celui de Borland.

    Quant au x86-64, il utilise aussi un __fastcall plus ou moins standardisé (4 registres, espace toujours réservé sur la pile), mais j'ai lu sur ce forum qu'il y avait aussi des différences sur quel registre reçoit quoi.
    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.

  13. #13
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 164
    Points : 356
    Points
    356
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Il y a toujours this comme premier paramètre.
    je l'oubliais celui-là.

  14. #14
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Quant au x86-64, il utilise aussi un __fastcall plus ou moins standardisé (4 registres, espace toujours réservé sur la pile), mais j'ai lu sur ce forum qu'il y avait aussi des différences sur quel registre reçoit quoi.
    tu as du le lire sur la FAQ et la MSDN : F.A.Q. Assembleur x86 / 64 > Quelle est la convention d'appel pour les processeurs x86 64 bits ?

    Citation Envoyé par Médinoc Voir le message
    Je ne connais pas du tout safecall. À ma connaissance, COM utilise __stdcall (avec un #define STDMETHODCALLTYPE dessus), sauf pour des fonctions variadiques où __cdecl est utilisé à la place (avec un #define STDMETHODVCALLTYPE dessus)
    Oui, c'est une dénomination borland lorsqu'ils ont implementés le COM dans Delphi, ils ont standardisés certains éléments plus que Microsoft ne l'avait fait : safecall c'est du stdcall mais toute procedure ou fonction retourne un HResult (et donc devient une fonction)

    safecall - Bibliothèque de types (Delphi)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  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 518
    Points
    41 518
    Par défaut
    Ah en gros, safecall c'est le mappage de HRESULT __stdcall foo([out, retval] int* p) vers int __safecall foo().
    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.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/06/2010, 16h24
  2. [FLASH 8] Ciblage dans les fonctions
    Par abenhass dans le forum Flash
    Réponses: 2
    Dernier message: 14/12/2005, 14h00
  3. "_" dans les fonctions
    Par reggae dans le forum C
    Réponses: 3
    Dernier message: 30/09/2005, 19h08
  4. Réponses: 2
    Dernier message: 07/10/2004, 17h00
  5. [plpgsql] transaction dans les fonctions ?
    Par hpghost dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 27/06/2004, 16h56

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