235 votes

Différence entre le crochet d'angle < > et les guillemets doubles " " lors de l'inclusion de fichiers d'en-tête en C++ ?

Duplicata possible :
Quelle est la différence entre #include <nom de fichier> et #include "nom de fichier" ?

Quelle est la différence entre une cornière < > et des guillemets doubles " " lors de l'inclusion de fichiers d'en-tête en C++ ?

Je veux dire quels fichiers sont censés être inclus en utilisant par exemple : #include <QPushButton> et les fichiers à inclure en utilisant par exemple : #include "MyFile.h" ? ??

246voto

Carl Norum Points 114072

Cela dépend du compilateur. Cela dit, en général, l'utilisation de " donne la priorité aux en-têtes du répertoire de travail actuel sur les en-têtes du système. <> est généralement utilisé pour les en-têtes du système. D'après la spécification (section 6.10.2) :

Une directive de prétraitement de la forme

  # include <h-char-sequence> new-line

recherche dans une séquence d'emplacements définis par l'implémentation un en-tête identifié de manière unique par la séquence spécifiée entre l'en-tête et l'en-tête. < y > et entraîne le remplacement de cette directive par l'ensemble du contenu de l'en-tête. La manière dont les emplacements sont spécifiés ou l'en-tête identifié est définie par l'implémentation.

Une directive de prétraitement de la forme

  # include "q-char-sequence" new-line

entraîne le remplacement de cette directive par tout le contenu du fichier source identifié par la séquence spécifiée entre les caractères " délimiteurs. Le fichier source nommé est recherché d'une manière définie par l'implémentation. Si cette recherche n'est pas prise en charge ou si elle échoue, la directive est retraitée comme si elle lisait

  # include <h-char-sequence> new-line

avec la même séquence contenue (y compris > c d'origine.

Ainsi de suite le plus à l'aide des compilateurs "" vérifie d'abord votre répertoire local, et s'il ne trouve pas de correspondance, il passe à la vérification des chemins d'accès du système. L'utilisation de <> lance la recherche avec les en-têtes du système.

46voto

Fabio Ceconello Points 8662

Lorsque vous utilisez des crochets, le compilateur recherche le fichier dans la liste des chemins d'accès. Lorsque vous utilisez des guillemets doubles, il recherche d'abord le répertoire courant (c'est-à-dire le répertoire où se trouve le module en cours de compilation) et ensuite seulement la liste des chemins d'inclusion.

Ainsi, par convention, vous utilisez les crochets d'angle pour les inclusions standard et les guillemets doubles pour tout le reste. Cela garantit que dans le cas (non recommandé) où vous avez un en-tête local avec le même nom qu'un en-tête standard, le bon sera choisi dans chaque cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X