Mogelijk duplicaat:
Wat is het verschil tussen #include <filename> en #include “bestandsnaam”?
Wat is het verschil tussen punthaak < >
en dubbele aanhalingstekens " "
bij het opnemen van headerbestanden in C++?
Ik bedoel welke bestanden moeten worden opgenomen met bijvoorbeeld: #include <QPushButton>
en welke bestanden moeten worden opgenomen met bijvoorbeeld: #include "MyFile.h"
???
Antwoord 1, autoriteit 100%
Het is afhankelijk van de compiler. Dat gezegd hebbende, geeft het gebruik van "
in het algemeen voorrang aan headers in de huidige werkdirectory boven systeemheaders. <>
wordt meestal gebruikt voor systeemheaders. Van naar de specificatie (paragraaf 6.10 .2):
Een preprocessing-richtlijn van het formulier
# include <h-char-sequence> new-line
zoekt een reeks door implementatie gedefinieerde plaatsen voor een kop die uniek wordt geïdentificeerd door de gespecificeerde reeks tussen de scheidingstekens
<
en>
en zorgt ervoor dat die richtlijn wordt vervangen door de volledige inhoud van de kop. Hoe de plaatsen worden gespecificeerd of de geïdentificeerde koptekst is door de implementatie gedefinieerd.Een preprocessing-richtlijn van het formulier
# include "q-char-sequence" new-line
veroorzaakt de vervanging van die richtlijn door de volledige inhoud van het bronbestand geïdentificeerd door de gespecificeerde volgorde tussen de
"
scheidingstekens. Het genoemde bronbestand wordt gezocht op een door de implementatie gedefinieerde manier. Als dit zoeken wordt niet ondersteund, of als het zoeken mislukt, wordt de richtlijn opnieuw verwerkt alsof deze gelezen is# include <h-char-sequence> new-line
met de identieke reeks (inclusief
>
tekens, indien aanwezig) van het origineel
richtlijn.
Dus bij de meestecompilers, controleert het gebruik van de ""
eerst uw lokale directory, en als het geen overeenkomst vindt, gaat het verder met het controleren van de systeempaden. Door <>
te gebruiken, wordt de zoekopdracht gestart met systeemkoppen.
Antwoord 2, autoriteit 26%
Als u punthaken gebruikt, zoekt de compiler naar het bestand in de lijst met padnamen. Wanneer u dubbele aanhalingstekens gebruikt, doorzoekt het eerst de huidige map (d.w.z. de map waar de module die wordt gecompileerd zich bevindt) en pas daarna zoekt het in de lijst met opgenomen paden.
Dus volgens afspraak gebruik je de punthaken voor standaard omvat en de dubbele aanhalingstekens voor al het andere. Dit zorgt ervoor dat in het (niet aanbevolen) geval dat je een lokale header hebt met dezelfde naam als een standaard header, in elk geval de juiste wordt gekozen.