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 :

Avertissement émis par le compilateur incompris


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 120
    Par défaut Avertissement émis par le compilateur incompris
    J'ai cet avertissement que je ne comprends pas.
    Voici le code d'exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void test()
    { char s[]="salut";
       gets(s);
        printf("%s", s);
    }
    Voici le retour du compilateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    warning: Implicit declaration of function 'gets' [-Wimplicit-function-declaration]
    gets(s)
    J'ai besoin de votre aide

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Trois choses sont à dire:
    En C, une fonction non déclarée était (il y a longtemps) déclarée implicitement comme retournant un int.
    C'était il y a très longtemps (norme d'il y a presque 30 ans), depuis, c'est très vivement déconseillé.
    Essaye d'utiliser un compilateur moderne, et une norme récente. Par exemple, avec gcc, c'est l'option --std=C11, voire un intermédiaire (je ne sais plus)

    Ce warning signifie que tu n'as pas inclus l'entête déclarant cette fonction.

    gets est périmée, dangereuse, fausse, mal pensée, très vivement déconseillée, voire interdite, et supprimée de la norme.
    La raison est qu'elle peut provoquer un dépassement mémoire, c'est à dire écrire un contenu arbitraire au dela de ton buffer (buffer overflow).

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 120
    Par défaut
    le fichier d'entête est inclus stdio.h
    , étant donné que la fonction est de la bibliothèque standard cela me donne à ne pas comprendre cet avertissement.
    J'utilise gcc moderne. En ce qui concerne le danger lié à cet fonction, j'en suis conscient. C'était juste pour des tests. Le fait est que j'ai souvent ce genre d'avertissement en utilisant les fonctions de la bibliothèque standard .

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    depuis C11, qu'implique normalement "le C moderne", cette fonction n'est plus déclarée.

    Je suis curieuse de savoir quels sont ton compilateur et ta commande de compilation, notamment les options de langage et de warning utilisées.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 120
    Par défaut
    J'utilise gcc 5.4.0
    Les options de compilation:
    gcc -Wall test.tc

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Bonjour,

    Citation Envoyé par free_01_binairy Voir le message
    le fichier d'entête est inclus stdio.h
    , étant donné que la fonction est de la bibliothèque standard cela me donne à ne pas comprendre cet avertissement.
    Certes, mais cela ne dispense pas d'inclure le fichier *.h quand même, chose que l'on ne voit pas dans ton extrait. Bibliothèque standard ne signifie pas forcément « obligatoire ».

    J'utilise gcc moderne. En ce qui concerne le danger lié à cet fonction, j'en suis conscient. C'était juste pour des tests. Le fait est que j'ai souvent ce genre d'avertissement en utilisant les fonctions de la bibliothèque standard .
    Citation Envoyé par free_01_binairy Voir le message
    J'utilise gcc 5.4.0
    Les options de compilation:
    gcc -Wall test.tc
    Actuellement, j'utilise la version 6.3.1 de GCC. J'ai certes l'avertissement concernant la dépréciation de cette fonction, mais je ne rencontre une déclaration implicite uniquement si j'omets d'inclure le fichier *.h ou si je compile avec --std=C11.

Discussions similaires

  1. [Turbo Pascal] Unité Graph non trouvée par le compilateur
    Par Napocalyx dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 04/04/2008, 23h16
  2. Erreur retournée par le compilateur
    Par robotor dans le forum Simulink
    Réponses: 1
    Dernier message: 27/03/2008, 10h14
  3. Réponses: 14
    Dernier message: 03/07/2006, 16h55
  4. Réponses: 5
    Dernier message: 16/06/2006, 23h05
  5. Intercepter les messages émis par WordApplication
    Par Claude Animo dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 11/07/2005, 20h23

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