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 :

conversion de types


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Par défaut conversion de types
    Bonsoir à vous tous !

    J'ai résolu mon problème mais ça m'énerve parce que je ne trouve pas d'explication du pourquoi je l'ai résolu.

    C'est très simple dans un fichier foo1.c j'ai une fonction (déclaration et définition) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uint8_t* make_sine(double, double, double);
    Dans un second fichier foo2.c, j'appelle cette fonction
    En pensant que la conversion des int en double se ferait automatiquement, or ce n'est pas le cas. C'est comme si les int (500, 1, 0) était rentré dans la fonction sans vérification de type et du coup la fonction me renvoi des valeurs aberrantes. Évidemment, si je met (500.0, 1.0, 0.0) tout fonctionne.

    J'ai résolu le problème en déclarant mon prototype de fonction dans un fichier foo1.h et là les conversions se font implicitement !

    Est-ce que quelqu'un pourrait m'expliquer pourquoi il n'y a pas cette vérification de type quand on appel une fonction depuis un autre fichier.

    Merci !

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Est-ce que quelqu'un pourrait m'expliquer pourquoi il n'y a pas cette vérification de type quand on appel une fonction depuis un autre fichier
    Tout simplement parce que le prototype de la fonction n'étant pas connu (et le compilateur devrait émettre un avertissement), le type des arguments attendus par la fonction est inconnu. Comment alors vérifier les types ?
    La présence d'un prototype de la fonction (une déclaration spécifiant le type de la valeur de retour mais également celui des paramètres ou la définition de la fonction) est obligatoire avant l'utilisation.

    Il faut bien voir que les compilations de foo1.c et de foo2.c sont indépendantes. Ce n'est qu'au niveau de l'éditeur de liens que la liaison entre eux sera faite. On doit donc incorporer à chaque unité de compilation toutes les informations nécessaires à sa compilation.
    En incluant ce .h contenant le prototype de la fonction, on informe le compilateur du type de la valeur de retour et de celui des paramètres.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Par défaut
    Ok je te remercie pour ta réponse.

    Mais du coup c'est pas très sécurisant que le compilateur accepte qu'on appelle une fonction dont il ne connait pas le prototype.

    Le compilateur devrait réclamer obligatoirement un fichier .h. Et il ne m'affiche même pas de warning (j'utilise gcc fournit avec debian squeeze).

    Je vais me renseigner un peu plus sur la compilation à proprement dit.

    A+ !

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Je te conseille d'aller lire ceci :
    VI. Comment bien configurer son compilateur

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

Discussions similaires

  1. [DATE][CONVERSION] du type numerique au type date
    Par hamed dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/04/2005, 16h16
  2. Conversion de type
    Par sovitec dans le forum Langage
    Réponses: 5
    Dernier message: 15/12/2004, 14h29
  3. Conversion de type
    Par poirier dans le forum ASP
    Réponses: 2
    Dernier message: 06/07/2004, 10h30
  4. [MYSQL] conversion de type sur import de script
    Par sebos63 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 27/08/2003, 10h00
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

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