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 :

à propos des #include


Sujet :

C

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut à propos des #include
    Bonjour, je suis en train d'apprendre le Fortran et dans ce langage il n'y a pas de #include (je débute, donc peut-être que dans un cours un peu plus avancé, j'en verrai...). Je m'aperçois donc que si je veux travailler sur des strings, faire du calcul (cos, exp,...) je n'ai pas besoin de faire un #include<string.h> ou un #include<math.h> et encore moins besoin de compiler avec -lm (ou avec son équivalent Fortran).
    Si les créateurs du C (et du C++) ont opté pour que l'on mette des #include dès que l'on en a besoin, c'est qu'il y a bien un intérêt. D'où ma question : quel est-il ? Est-ce une question de portabilité ? Pourquoi, par défaut, tous les #include ne sont-ils pas inclus ?

    Autre question : le Fortran a des fonctions intrinsèques. Le programmeur appelle la fonction ABS() mais le compilo appelle soit IABS() (pour les entiers), CABS() (pour les complexes), DABS() pour les double precision. Le choix est fait par le compilo suivant le type des arguments.
    Pourquoi en C, est-ce au programmeur de faire la différence entre abs(), fabs() ? Je pense qu'il doit bien y avoir un intérêt à faire cette méthode.

    Merci.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    Pour commencer, les #include permettent de partager l'interface d'une bibliothèque ou d'un autre fichier .c à d'autres fichiers. En fait, le C demande qu'on lui fournisse le prototype des fonctions qu'on utilise, et les .h permettent de connaître ces prototypes afin de faire la liaison correctement entre appels de méthodes et implémentation des méthodes.

    Pour ta deuxième question, le C est un langage de bas niveau où tout doit être très précisément définit, ce que tu indiques correspond à la surcharge en C++, Java ou C#, et ça ce n'est pas disponible dans le C, car encore une fois on a besoin de connaître les signatures précises des fonctions afin que la conversion en instructions processeurs soit efficace.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par PsychoH13 Voir le message
    Pour commencer, les #include permettent de partager l'interface d'une bibliothèque ou d'un autre fichier .c à d'autres fichiers. En fait, le C demande qu'on lui fournisse le prototype des fonctions qu'on utilise, et les .h permettent de connaître ces prototypes afin de faire la liaison correctement entre appels de méthodes et implémentation des méthodes.

    Pour ta deuxième question, le C est un langage de bas niveau où tout doit être très précisément définit, ce que tu indiques correspond à la surcharge en C++, Java ou C#, et ça ce n'est pas disponible dans le C, car encore une fois on a besoin de connaître les signatures précises des fonctions afin que la conversion en instructions processeurs soit efficace.
    Salut, oui je sais bien qu'il faut fournir les prototypes des fonctions (d'où les .h). Mais effectivement, en fortran la déclaration des fonctions est différentes (par rapport au C), d'où peut-être le fait qu'il n'y a pas de .h (enfin son équivalent).

    Merci de tes précisions.

  4. #4
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Et
    Pourquoi, par défaut, tous les #include ne sont-ils pas inclus ?
    Je vois au moins deux réponses liées aux performances de compilation :
    - tous les fichiers include sont parsés
    - tout changement dans un fichier .h implique en principe une recompile de ton source (en fonction de tes outils de gestion de projet)

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    d'accord
    merci.

  6. #6
    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 salseropom Voir le message
    Bonjour, je suis en train d'apprendre le Fortran et dans ce langage il n'y a pas de #include (je débute, donc peut-être que dans un cours un peu plus avancé, j'en verrai...). Je m'aperçois donc que si je veux travailler sur des strings, faire du calcul (cos, exp,...) je n'ai pas besoin de faire un #include<string.h> ou un #include<math.h>
    Ce n'est generalement pas reellement necessaire en C non plus (ou l'est-ce devenu en C99?, j'ai la flemme de verifier; il y a de toute maniere tellement d'avantages a avoir une verification statique des types que de ne pas inclure n'est pas conseille). Fortran, (comme C sans inclusion) suppose des choses sur les parametres et si tu te trompes, debrouilles-toi avec tes problemes a l'execution. C'est un peu mititge en Fortran en donnant au compilateur la connaissance du "prototype" de certaines fonctions. Naturellement Fortran 90 (ou 95?) a introduit un systeme de module -- mais c'est apres que j'ai utilise Fortran...

    et encore moins besoin de compiler avec -lm (ou avec son équivalent Fortran).
    La necessite de -lm est quelque chose d'absolument articificiel. C'est propre a Unix pour des raisons historiques qui ne correspondent plus en rien a la realite.

    Si les créateurs du C (et du C++) ont opté pour que l'on mette des #include dès que l'on en a besoin, c'est qu'il y a bien un intérêt. D'où ma question : quel est-il ? Est-ce une question de portabilité ? Pourquoi, par défaut, tous les #include ne sont-ils pas inclus ?
    * Et comment veux-tu les connaitre tous? (La plupart de mes entetes ne sont pas standards mais propre a mes programmes).

    * Ca simplifie le compilateur (ne pas oublier que le C a ete concu sur une machine permettant 64K de donnee et 64K de programme) et accelere la compilation.

    Autre question : le Fortran a des fonctions intrinsèques. Le programmeur appelle la fonction ABS() mais le compilo appelle soit IABS() (pour les entiers), CABS() (pour les complexes), DABS() pour les double precision. Le choix est fait par le compilo suivant le type des arguments.
    Pourquoi en C, est-ce au programmeur de faire la différence entre abs(), fabs() ? Je pense qu'il doit bien y avoir un intérêt à faire cette méthode.
    C'est une forme de surcharge limitee a un ensemble de fonctions connues du compilateur. <tgmath.h> permet la meme chose en C99.

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

Discussions similaires

  1. A propos des includes !
    Par tus01 dans le forum Langage
    Réponses: 3
    Dernier message: 28/04/2006, 10h05
  2. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03
  3. A propos des 'File management Functions' de Windows
    Par znaidi dans le forum Windows
    Réponses: 3
    Dernier message: 01/04/2003, 16h01
  4. A propos des modèles d'objet (avec sources)
    Par DevX dans le forum C++Builder
    Réponses: 14
    Dernier message: 01/12/2002, 12h22

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