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 :

prototype de fonction


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 44
    Par défaut prototype de fonction
    bonjour,

    Quelle est la meilleur manière de déclarer une fonction.

    • Ecrire le prototype dans un fichier et l'inclure la source avec la directive #include
    • Ecrire le prototype dans le meme fichier source du programme qui l'utilise
    • Définir la fonction avant quelle ne soit appelée


    Je pose cette question suite a une lecture de mon apprentissage dans le fondamentale du langage.

    merci

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Mon avis

    Si la fonction est static (comprendre accessible uniquement par le source), ecrire le prototype en début du fichier source (après les éventuels include, define et autres typedef)

    Si la fonction est extern (comprendre accessible par d'autres sources), ecrire le prototype dans le fichier include du source.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Tout à fait d'accord avec cet avis. Après, rien n'empêche de mettre le prototype d'une fonction static dans un header, à condition qu'il soit inclus dans la source mais ça n'apporte rien et on se mélange ...

    Tu peut aussi la définir avant qu'elle ne soit appellée quand elle est static. Pour les extern par contre, le mieux c'est de mettre le prototype dans le fichier.h.

    @ +

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Je dirais qu'il n'y a pas vraiment de mauvaise manière de faire, selon la situation dans laquelle tu te trouve.

    La seule chose qui est sure, c'est que, si tu va appeler ta fonction dans plusieurs modules d'un projet, il faudra la déclarer dans un fichier d'en-tête.

    Pour le reste, tu peux envisager de ne pas déclarer une fonction dans un fichier d'en-tête si tu as la certitude que cette fonction ne sera appelée que par les fonctions qui se trouvent dans la même unité de compilation, ce qui apporte déjà une restriction majeure

    Une autre restriction étant que les fonctions membres de classes ou de structures doivent être déclarées dans la définition de la classe

    Cependant, cela peut arriver lorsque tu te trouve face à une fonction "kilométrique" que tu décide de factoriser, en sachant que seule la fonction d'origine sera réellement appelable.

    Si, de manière quasi exceptionnelle, tu te trouve face à une situation dans laquelle il y a une fonction qui ne doit pas être déclarée dans un fichier d'en-tête, il faudra encore tenir compte du sens de lecture du compilateur pour déterminer s'il te faut placer une déclaration de la fonction ou non.

    En effet, le compilateur va lire le fichier de haut en bas, et ne pas savoir, lorsqu'il en est à la ligne 9 (par exemple) ce qui se passe à la ligne 10.

    Si, pour une raison ou une autre, il rencontre un symbole quelconque (le nom d'une fonction dans le cas qui nous occupe) qu'il n'a pas encore rencontré ne serait-ce que sous la forme d'une déclaration, tu va te faire jeter comme un malpropre.

    Tu ne peux donc envisager de te passer de la déclaration d'une fonction que si tu as la certitude que toutes les fonctions qui pourront l'invoquer se trouvent plus bas dans le code.

    Il faut aussi prendre en compte ce problème en ce qui concerne les fonctions qui seront invoquée par celle pour laquelle tu envisage de te passer de déclaration

    En conclusion, nous pourrions dire que c'est faisable jusqu'à un certain point: en gros, tant que tu n'a pas des séries d'appels plus ou moins circulaires (A qui appelle B, qui appelle C, qui appelle... A).

    De plus, cette pratique apporte une restriction de taille: tu te trouves face à l'obligation de garder un ordre précis dans la définition de tes fonctions.

    Et, quoi qu'il en soit, imposer un tel ordre est de nature à apporter énormément de problèmes ne serait-ce que parce que tu risque toujours d'oublier que telle fonction doit impérativement être définie avant telle autre.

    En définitive, je dirais qu'une fonction doit systématiquement être déclarée avant d'être définie:
    • dans le fichier d'en-tête si elle doit être accessible en dehors de l'unité de compilation dans laquelle elle est définie
    • juste après les différentes inclusions si elle ne doit être accessible qu'au départ des fonctions qui sont définies dans la même unité de compilation
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. [POO] Prototypes de fonctions et IE
    Par T.NightGlow dans le forum Bibliothèques & Frameworks
    Réponses: 9
    Dernier message: 15/01/2008, 16h50
  2. definition prototypes de fonctions dans main
    Par fantomas261 dans le forum C
    Réponses: 4
    Dernier message: 19/10/2007, 11h18
  3. Question sur les prototypes de fonctions
    Par GnuVince dans le forum Langage
    Réponses: 2
    Dernier message: 23/11/2006, 23h37
  4. .net prototype de fonction
    Par stgi02 dans le forum MFC
    Réponses: 1
    Dernier message: 13/04/2006, 22h41
  5. prototype de fonction ?
    Par salseropom dans le forum C
    Réponses: 3
    Dernier message: 07/04/2006, 10h01

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