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 confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    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 expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

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

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

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    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
    Points : 11 625
    Points
    11 625
    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 confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    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 expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    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
    Points : 11 625
    Points
    11 625
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 581
    Points
    41 581
    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...

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    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 é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 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 expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    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 é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
    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 confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    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 é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 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 confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    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