2012-12-03 13 views
5

Eventuali duplicati:
What is the difference between #include <filename> and #include “filename”?Perché #include "stdio.h" funziona?

Perché non fa il compilatore si lamentano quando scrivo quanto segue:

#include "stdio.h" 

Non dovrebbe essere

#include <stdio.h> 

, perché stdio.h è effettivamente memorizzato in una cartella della libreria e non nella cartella dell'unità di traduzione? Perché funziona comunque?

+1

'" ... "' guarda localmente * prima *, e poi altrove. – BoBTFish

+1

no, dovrebbe essere davvero '#inlcude ' – 111111

+1

http://stackoverflow.com/questions/21593/che-è-differenza-dato-include-filename-and-include-filename – BoBTFish

risposta

8

La differenza tra "" e <> non è molto. Entrambi cercano l'intestazione nei posti definiti dall'implementazione 1, 2. La differenza è che se quella ricerca non riesce per "", la ricerca avviene come se stesse usando <>. (§16.2)

Fondamentalmente, questo significa che se <> trova un'intestazione con un certo nome, "" non manca di trovare un'intestazione con lo stesso nome .


Questi luoghi di attuazione definite non devono essere lo stesso per entrambe le forme.

Non è necessario che una di queste cartelle della libreria di ricerca e l'altra eseguano la ricerca nella cartella della TU. Il compilatore è autorizzato a cercare nell'intero filesystem e persino a cercarlo su Google se lo desidera.

Questo non significa che trovino sempre la stessa intestazione, però.

+0

C'è un requisito, tuttavia, che se '#include" xxx "' fallisce, il compilatore lo rielabora come se fosse stato '#include '. –

+0

@James Ecco a cosa intendevo la terza frase. Pensi che dovrei riformularlo o ti è mancato? –

+0

+1 per i file di origine google :-) – Angew

0

Ciò è dovuto al modo in cui è definita la sintassi di inclusione.

#include <cstdio> significa che il compilatore dovrebbe includere la libreria standard cstdio

#include "cstdio" significa che il compilatore dovrebbe cercare di trovare il file "cstdio", guardando in primo luogo nella directory corrente e utilizzando la posizione delle librerie standard come ripiego .

+2

Indica o meno "#include <>" o "#include" "' guarda prima nella directory corrente o del tutto è stata definita l'implementazione. –

0

"" versus <> cambia solo l'ordine di ricerca.

così con

#include "stdio.h" 

precompilatore partirà ricerca dalla directory di unità di traduzione, e poi passare a predefinito "include" directory

Mentre

#include <stdio.h> 

È viceversa

+0

@CharlesBailey Ma in pratica, è generalmente accettato che l'inclusione di "..." dovrebbe prima cercare nella directory che contiene il file con l'inclusione. (D'altra parte, non credo che nessun compilatore guarderà nella directory corrente per un inclusivo, a meno che non lo passi "-I" o il file che sta leggendo sia nella directory corrente.) –

+0

@CharlesBailey, dove ho detto qualcosa sulla ** directory ** attuale? –

+0

@aleguna: Spiacenti, per "directory corrente" leggi "directory contenente il file sorgente iniziale per l'unità di traduzione che è stata compilata". Ero pigro. –

Problemi correlati