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 :

[warning] implicit declaration of function ‘fileno’


Sujet :

C

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut [warning] implicit declaration of function ‘fileno’
    Bonjour,
    J'ai ce message de gcc alors que j'ai au debut de mon fichier. Est ce normal ? Car je ne vois pas ou peut etre mon erreur...

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut, visiblement, c'est pas standard
    Peut etre qu'en -ansi ça ne passe pas donc

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    tu compiles en -ansi ?
    fileno n'est pas une fonction C standard à ma connaissance, c'est une fonction POSIX.
    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.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    Oui, cela fait partie de la gnu c lib. Et je compile en C99. (sous linux, POSIX compatible donc.)

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par Gruik
    Salut, visiblement, c'est pas standard
    Peut etre qu'en -ansi ça ne passe pas donc
    Aucun rapport ! La norme ansi n'interdit pas d'utiliser d'autres fonctions que celle spécifier dans la norme.

    Il faut juste ajouter -D__USE_POSIX aux options de gcc pour inclure le prototype des fonctions posix

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    Citation Envoyé par gege2061
    Aucun rapport ! La norme ansi n'interdit pas d'utiliser d'autres fonctions que celle spécifier dans la norme.
    C'est bien ce que je pensais. Un header est un header quel que soit la norme.

    Citation Envoyé par gege2061
    Il faut juste ajouter -D__USE_POSIX aux options de gcc pour inclure le prototype des fonctions posix
    Une option du compilateur, je n'y aurais jamais pensé. Merci, je testerais des que possible. Puis je fermerais la discussion.

    Par contre, une question. Si on regarde les docs, la declaration de fileno est dans stdio.h. stdio.h contient les declarations des fonctions "std" mais devrait aussi contenir celle-ci.

    Cette option est pratique mais je ne comprends pas pourquoi. Il y a une raison technique ?

  7. #7
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Le C ANSI (ou C99 dans ton cas) ne l'interdit pas, mais le flag -ansi ou -std=c99 te force à n'utiliser que les fonctions de ces standards là, au cas où tu voudrais porter ton soft sur une autre plateforme strictement C99

    Je pense que faire des -D c'est de la bidouille, si tu utilises plus que les fonctions du C99, passe en GNU99 et mets le flag -pedantic pour t'assurer qu'au moins au niveau de la syntaxe c'est conforme C99

  8. #8
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par Gruik
    Le C ANSI (ou C99 dans ton cas) ne l'interdit pas, mais le flag -ansi ou -std=c99 te force à n'utiliser que les fonctions de ces standards là, au cas où tu voudrais porter ton soft sur une autre plateforme strictement C99
    C'est plutot génant pour créer tes propres fonctions
    Dans ce cas pourquoi il n'y a aucun problème avec GTK+ ?

    Citation Envoyé par Gruik
    Je pense que faire des -D c'est de la bidouille, si tu utilises plus que les fonctions du C99, passe en GNU99 et mets le flag -pedantic pour t'assurer qu'au moins au niveau de la syntaxe c'est conforme C99
    Bah ça force à faire attention, mais si tu as une autre solution...

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Citation Envoyé par gege2061
    C'est plutot génant pour créer tes propres fonctions
    Dans ce cas pourquoi il n'y a aucun problème avec GTK+ ?
    Parce que GTK+ est une bibliothèque, il ne doit donc pas y avoir de #ifndef __STDC__ et #ifndef STRICT_ANSI dans ses headers, contrairement aux headers standard dont les extensions sont entourées de tels tests...
    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.

  10. #10
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Oui, quand je disais "te force à n'utiliser que les fonctions de ces standards", je parlais des fonctions qui sont dans la libc (du compilateur)

  11. #11
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Gruik
    Je pense que faire des -D c'est de la bidouille
    Faire un -D, ce n'est pas de la bidouille, c'est le moyen officiel d'activer les definitions de posix. Mais il faut faire -D_POSIX_C_SOURCE=200112L.

  12. #12
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    D'accord, je vais me cacher
    N'empeche, j'aurais préféré que ça soit configurable proprement avec des vraies options du compilateur (-std)

  13. #13
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    A la place du -D, on peut faire un #define en tete de ses sources. C'est assez difficile de faire la meme chose avec les options du compilateur.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    -D__USE_POSIX ne fonctionne effectivement pas.
    Par contre -D_POSIX_C_SOURCE=200112L si.

    Cependant, il y a t il une raison au 200112L? (2001/12/-- ?)
    Car en general une simple definition sans valeur fonctionne. Et c'est le cas ici.

  15. #15
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par TabrisLeFol
    -D__USE_POSIX ne fonctionne effectivement pas.
    Par contre -D_POSIX_C_SOURCE=200112L si.

    Cependant, il y a t il une raison au 200112L?
    Car en general une simple definition sans valeur fonctionne. Et c'est le cas ici.
    2001/12, date de la derniere version de POSIX a ma connaissance. Sans date, je ne sais pas ce que ca fait precisement, vraissemblablement la premiere version (encore qu'il me semble que la premiere version utilisait _POSIX_SOURCE et pas _POSIX_C_SOURCE).

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    OK.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/01/2012, 10h06
  2. [gcc/warning] implicit declaration of function ‘close’
    Par TabrisLeFol dans le forum Réseau
    Réponses: 4
    Dernier message: 09/01/2007, 20h48
  3. Réponses: 3
    Dernier message: 18/10/2006, 20h42
  4. implicit declaration of function
    Par guillaume_pfr dans le forum C
    Réponses: 7
    Dernier message: 12/06/2003, 10h59
  5. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 13h37

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