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 :

déclaration de fonction implicite ou explicite


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 29
    Points : 26
    Points
    26
    Par défaut déclaration de fonction implicite ou explicite
    Bonjour,

    Je lis le bouquin "méthodologie de la programmation en c norme C99".

    L'auteur du livre dit que si l'on déclare une fonction avant la fonction main, c'est une déclaration implicite.

    Et inversement si l'on déclare une fonction après la fonction main, c'est une déclaration explicite.

    cependant en lisant quelques pages plus loin, il montre un exemple ou il déclare une fonction après la fonction main, et parle de déclaration implicite.

    Qui pourrait bien m'expliquer cette notion de déclaration implicite ou explicite ?

    En vous remerciant par avance.

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    En fait la déclaration implicite (telle que je l'ai compris), c'est quand tu donne le corps de ta fonction en même temps.

    Par exemple :

    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
     
    int carre( int n )
    {
         return n * n;
    }
     
    int carre2( int n );
     
    int main( void )
    {
    ...
    }
     
    int carre2( int n )
    {
         return n * n;
    }
    Ici, carre() est déclarée implicitement puisque tu ne donnes pas la signature de la fonction avant de donner son corps (ie: tu fais les deux en même temps).

    La fonction carre2 est déclarée explicitement (tu donnes sa signature) et ensuite définie après le main.

  3. #3
    Membre averti Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Points : 414
    Points
    414
    Par défaut
    Personellement, g une autre notion a expliquer, ce que la declaration d'une fonction avnt la fonction main, sera connu avant l'appelle, mais la definition d'une fonction aprés le main, elle ne sera connu par main que a la fin du la compilation.....


    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void lireChaine()
    {
       .....
    }
     
    int main()
    {
       .....
       lireChaine();
       .....
       return 0;
     
    }
    pendant la compilation de la function main, le compilateur cannais la fonction 'lireChaine' alors c'est une declaration explicite....

  4. #4
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    En fait j'ai du mal m'exprimer. Lorsque tu définis ta fonction (ie: tu donnes son corps), ça déclare la fonction en même temps. Dans une déclaration explicite, tu déclares ta fonction puis tu la définis où tu veux.

    Personellement, g une autre notion a expliquer, ce que la declaration d'une fonction avnt la fonction main, sera connu avant l'appelle, mais la definition d'une fonction aprés le main, elle ne sera connu par main que a la fin du la compilation.....
    Pour moi la déclaration implicite ou explicite, ça n'est pas un problème d'être avant ou après la fonction main, tu peux très bien avoir une déclaration implicite après la fonction main (la fonction sera inutilisable on est bien d'accord).

    En fait, la déclaration implicite prend plus de sens dans la compilation séparée. (ie: avec les modules), où là elle est fortement déconseillée voire même impossible (car il y aurait redondance de code).

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 593
    Points
    41 593
    Par défaut
    Attention, le terme "déclaration implicite" employé par le compilateur gcc est différent de celui semble expliqué ici et mentionné dans le livre.
    • Le terme expliqué ici:
      • Si une fonction est définie sans être déclarée séparément, c'est une déclaration implicite.
      • Si la fonction est juste déclarée, et définie plus bas/autre part, c'est une déclaration explicite.
    • Le terme selon le compilateur gcc:
      • Si une fonction est définie ou déclarée avant toute utilisation, c'est une déclaration explicite.
      • Si une fonction est utilisée sans être déclarée ni définie plus haut, c'est une déclaration, implicite, avec des paramètres qui sont implicitement du type [FAUX]exact[/FAUX] qu'on a passé (promu), et un type de retour qui est implicitement int. Déconseillé en C, interdit en C++ (edit: Et en C99).

  6. #6
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    tout d'abord merci a tous les 2 de m'avoir repondu.

    donc si je vous resume si je declare une fonction avec sa definition c'est une declaration implicite ?

    et si je declare une fonction sans sa definition c'est une declaration explicite ?

    Merci pour les precisions.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 593
    Points
    41 593
    Par défaut
    Selon le vocabulaire du livre, oui.
    Selon le vocabulaire du compilateur gcc (edit: et de la norme), c'est explicite dans les deux cas.

    Edit: D'après le post de Jean-Marc, cela signifie que ton livre utilise son propre vocabulaire au lieu de respecter celui de la norme.

  8. #8
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Médinoc
    Attention, le terme "déclaration implicite" employé par le compilateur gcc est différent de celui semble expliqué ici et mentionné dans le livre.
    • Le terme expliqué ici:
      • Si une fonction est définie sans être déclarée séparément, c'est une déclaration implicite.
      • Si la fonction est juste déclarée, et définie plus bas/autre part, c'est une déclaration explicite.
    • Le terme selon le compilateur gcc:
      • Si une fonction est définie ou déclarée avant toute utilisation, c'est une déclaration explicite.
      • Si une fonction est utilisée sans être déclarée ni définie plus haut, c'est une déclaration, implicite, avec des paramètres qui sont implicitement du type exact qu'on a passé, et un type de retour qui est implicitement int. Déconseillé en C, interdit en C++.
    Notes:
    • gcc utilise la nomenclature de la norme;
    • avec une declaration implicite, les parametres sont promus d'abord plutot que d'etre du type exact (avec les memes promotions que dans le cas des appels a une fonction variadique -- qui ne peuvent pas etre utilisees valablement sans une declaration explicite).

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    bonjour,

    je possede le livre "méthologie de la programmation en c norme c99" et aussi le livre "syntaxe et fondamentaux du langage c"

    je vais a la page 55 rubrique "fonction" de ce meme livre.

    voila ce qui marqué :" les declarations implicites de fonction ne sont plus permises en ANSI C99"

    je crois que c'est claire et net la.

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 593
    Points
    41 593
    Par défaut
    Là, c'est "implicite" selon la norme.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    oui c'est implicite maintenant depuis la norme c99.

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par nicoser
    Je lis le bouquin "méthodologie de la programmation en c norme C99".

    L'auteur du livre dit que si l'on déclare une fonction avant la fonction main, c'est une déclaration implicite.

    Et inversement si l'on déclare une fonction après la fonction main, c'est une déclaration explicite.
    C'est le Braquelaire ? Tu peux donner la page ou le chapitre, j'ai un doute là...
    cependant en lisant quelques pages plus loin, il montre un exemple ou il déclare une fonction après la fonction main, et parle de déclaration implicite.

    Qui pourrait bien m'expliquer cette notion de déclaration implicite ou explicite ?

    En vous remerciant par avance.
    Je ne sais pas ce qu'a réellement dit l'auteur, ni comment tu l'as interprété, mais voici ce qu'il en est :

    - Une fonction définie avant son utilisation est déclarée explicitement.
    - Une fonction définie après son utilisation est déclarée implicitement, sauf si une déclaration séparée est placée avant l'utilisation.

    De plus, j'ajoute que l'usage des déclarations simples est proscrit depuis 1989, date de l'invention des prototypes qu'il faut utiliser en replacement des déclarations simples.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    salut,

    je crois que je l'ai plutot interpreté comme ca. mais etant un debutant...

    encore merci a tous de vos explications.

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

Discussions similaires

  1. Déclaration de fonction dans le "main".
    Par Pragmateek dans le forum C++
    Réponses: 14
    Dernier message: 23/06/2006, 20h32
  2. déclaration de fonctions externes
    Par poukill dans le forum C++
    Réponses: 40
    Dernier message: 17/05/2006, 17h15
  3. Réponses: 4
    Dernier message: 11/05/2006, 16h34
  4. Réponses: 6
    Dernier message: 20/11/2005, 03h53
  5. [JS] Problème déclaration de fonction
    Par glloq8 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/09/2005, 11h22

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