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 :

Différence entre inclusion d'header entre guillement ou entre crochet


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 99
    Par défaut Différence entre inclusion d'header entre guillement ou entre crochet
    Salut,

    pouvez vous me dire quelle est la différence entre

    #include <stdio.h> et #include "stdio.h"

    A+

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    <> : le préprocesseur cherche en premier dans les chemins spécifiés par l'option INCLUDE du compilateur et ensuite dans la variable d'environnement INCLUDE.

    "" : le préprocesseur cherche en premier dans le même répertoire que le fichier qui contient la directive #include et ensuite dans tous les répertoires de tous les fichiers qui ont inclus ce fichier et enfin cherche selon les régles de <>
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    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,

    Je raisonnerai plutot de la façon suivante : si on utilise les < > c'est pour inclure un header de la bibliotheque standard ou d'une bibliotheque installée sur le systeme, tandis que si on utilise les " " c'est pour inclure un header d'un source du projet

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Gruik a très bien résumé la chose ! (explication beaucoup plus pragmatique)
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Citation Envoyé par vicenzo Voir le message
    <> : le préprocesseur cherche en premier dans les chemins spécifiés par l'option INCLUDE du compilateur et ensuite dans la variable d'environnement INCLUDE.

    "" : le préprocesseur cherche en premier dans le même répertoire que le fichier qui contient la directive #include et ensuite dans tous les répertoires de tous les fichiers qui ont inclus ce fichier et enfin cherche selon les régles de <>
    Attention, la norme n'impose rien sur ce point. En particulier, rien n'est dit sur la façon de trouver les sources incluses entre " ", hormis le fait de chercher selon les règles de < > si cette recherche échoue.

    Toujours se réfèrer à la doc de son compilateur pour s'assurer de la manière dont les sources sont incluses.
    http://msdn2.microsoft.com/en-us/lib...d4(VS.80).aspx pour Visual C++
    Le man de gcc pour gcc
    ...

    En particulier, avec gcc, la variable d'environnement n'est pas INCLUDE mais CPATH ou C_INCLUDE_PATH.
    gcc possède une option -I- qui empêche l'utilisation du répertoire courant comme premier répertoire de recherche.

    A preprocessing directive of the form
    # include <h-char-sequence> new-line
    searches a sequence of implementation-defined places for a header identified uniquely by the specified sequence between the < and > delimiters, and causes the replacement of that directive by the entire contents of the header. How the places are specified or the header identified is implementation-defined.

    A preprocessing directive of the form
    # include "q-char-sequence" new-line
    causes the replacement of that directive by the entire contents of the source file identified by the specified sequence between the " delimiters. The named source file is searched for in an implementation-defined manner. If this search is not supported, or if the search fails, the directive is reprocessed as if it read
    # include <h-char-sequence> new-line
    with the identical contained sequence (including > characters, if any) from the original directive.

  6. #6
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    aoyou,

    Ta citation de la man de gcc, dans les faits (puisqu'il est vrai que la norme n'impose rien a ce sujet), correspond EXACTEMENT aux deux règles que j'ai cité (qui sont en l'occurence celles du précompilateur C fournit par Microsoft)...

    J'ai spécifié les termes "INCLUDE" pour rester vaque (/I pour microsoft, -I pour gcc par exemple pour la ligne de commande, ...) autant pour l'option de la ligne de commande que pour la variable d'environnement... qui peut encore avoir un autre nom sur d'autres systèmes, ...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Je n'ai pas dit le contraire. Heureusement qu'ils font encore à peu près de la même façon, ça facilite les choses. Mais j'ai déjà eu des soucis sur ce point avec un compilo propriétaire (je ne sais plus hp ?). Au vu du flou de la norme, j'ai rencontré une fois des règles de codage qui interdisaient tout simplement l'utilisation des " ". L'autobook (pour les projets gérés avec automake) préconise l'utilisation unique des <>.
    Au passage, sous Visual C++, la variable d'environnement s'appelle justement INCLUDE.

    Mais bon, au final, la meilleure définition de l'utilisation des " " et des < > est celle de Gruik.

  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
    Bonjour,

    Une petite lecture intéressante : Recherche des fichiers inclus

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Minouchka Voir le message
    pouvez vous me dire quelle est la différence entre

    #include <stdio.h> et #include "stdio.h"
    • Les fichiers de l'implémentation (standards et extension) sont notés <>
    • Les fichiers de l'application sont notés ""
    • Les fichiers des bibliothèques 'tiers' sont notés <> (le plus souvent) ou ""...

    Donc
    est correct
    est incorrect.

    L'ordre de recherche est géré par le compilateur selon des règles qui lui sont propres. Généralement <> et prioritaire sur "". Ne pas tirer de conclusions hâtives...

Discussions similaires

  1. La mauvaise entente entre session_start et header()
    Par Arget dans le forum Langage
    Réponses: 14
    Dernier message: 03/11/2011, 12h15
  2. [Boost] probleme d'inclusion du header thread.hpp
    Par Neaira05 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 04/05/2009, 18h37
  3. BCB C++ / Inclusion de headers
    Par a_lincoln54 dans le forum C++
    Réponses: 0
    Dernier message: 22/04/2008, 17h55
  4. Réponses: 2
    Dernier message: 02/05/2007, 13h28
  5. [Entrée cin] attendre un temps limité l'entrée
    Par L. Sierra dans le forum SL & STL
    Réponses: 4
    Dernier message: 05/02/2007, 16h38

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