2010-10-02 19 views

risposta

1

I caso di "" compilatore prima cercare il file di intestazione nella directory locale dove il file .c presenta

mentre in caso di <> compilatore cercare solo nella cartella di file di intestazione

6

La seconda versione viene specificato prima di eseguire la ricerca in una posizione definita dell'implementazione e, in seguito, se il file non viene trovato, cerca nella stessa posizione della versione <...>, che cerca nei percorsi solitamente specificati dall'opzione della riga di comando -I e dai percorsi di inclusione incorporati (indicando la posizione della libreria standard e delle intestazioni di sistema).

In genere, le implementazioni definiscono tale posizione in relazione alla posizione del file incluso.

8

<stdio.h> ricerche in posizioni di libreria C standard, mentre "stdio.h" ricerche nella directory corrente pure.

Idealmente, si utilizza <...> per le librerie C standard e "..." per le librerie che si scrivono e sono presenti nella directory corrente.

+0

Vuoi dire se il mio file * .c non è nella directory in cui è presente la libreria C standard, allora ci sarà errore? – Parikshita

+0

no, perché sembra comunque lì. E dubito che il tuo file c sia nella cartella C standard comunque. –

+0

No. Se si usa '" ... "', l'unica differenza è che il file '.h' verrà cercato nella directory corrente e anche nelle posizioni delle librerie C standard. –

1

#include <something.h> è inteso per le intestazioni di sistema, mentre #include "something.h" è per le intestazioni del proprio programma. Le intestazioni di sistema vengono cercate nelle solite directory di sistema (e quelle incluse nell'argomento -I), le cui intestazioni vengono cercate nella directory corrente e quindi nelle stesse posizioni delle intestazioni di sistema.

vedere http://gcc.gnu.org/onlinedocs/gcc-2.95.3/cpp_1.html#SEC6

1

Per i compilatori che ho usato, "..." inizia a cercare il file includere nella stessa directory del file di origine che viene compilato, quindi il percorso di inclusione. Include con < ...> inizia nel percorso di inclusione, salta il dado corrente a meno che non si trovi nel percorso di inclusione.

1

file header Normalmente standard sono racchiusi da <> e file specifici altri utenti sono specifed con ".

2

Il <> dire al compilatore di cercare il file nelle intestazioni delle biblioteche e '' dirgli di guardare in giro tra le intestazioni della vostra applicazione.

per quanto riguarda il motivo per cui ciascuno di essi funziona per voi, forse il compilatore guarda anche per il nome del file nelle intestazioni di libreria nel caso in cui non ha trovato uno tra il vostro.

0

<stdio.h> si riferisce a un'intestazione (non uno file di intestazione)
"stdio.h" fa riferimento a un file di origine.

Le intestazioni non devono esistere fisicamente nell'implementazione; il modo in cui vengono identificati è l'implementazione-definiti (in genere le intestazioni sono file in directory specifiche)

Quando la direttiva utilizza ", il file di origine viene cercato in un modo definito dall'implementazione e, se non lo trova, la direttiva viene rielaborato come se fosse stato scritto con < e > in primo luogo.

+0

Sono confuso dalle diciture di C99. Questo significa che '#include ' non è valido perché 'unistd.h' non è un'intestazione? O c'è un'altra ragione per cui usa "header" per "<...>" ma "source file" per "" ... "'? –

+0

Rileggendolo nuovamente, sembra non affermare che le intestazioni standard costituiscano esclusivamente l'insieme di intestazioni. Quindi ci possono essere intestazioni di implementazione definite, come intestazioni di posix e così via. –

+0

@litb: Penso che 'unistd.h' sia un'intestazione se l'implementazione (o in questo caso lo standard POSIX, implementato anche dall'implementazione) dice che è un'intestazione. Non è un'intestazione standard, ma non credo che lo standard C99 impedisca alle implementazioni di consentire intestazioni diverse da quelle standard. Non riesco a trovarlo da nessuna parte che lo consenta esplicitamente, ma solo il testo sulla mappatura dagli identificatori alle intestazioni definibili dall'implementazione. –

0

La differenza è che i file di intestazione creati dallo sviluppatore sono racchiusi da "". I file di intestazione già presenti nel sistema sono inclusi con <>. Anche le intestazioni <> necessitano della direttiva -I se le directory posizionate non si trovano nel percorso di ricerca del compilatore.

Bottom line: Le intestazioni con "", header di sistema con <>

2

Si utilizza # include quando si vuole dire: "cercare un file con questo nome nel sistema del includono directory". Usa #include "doublequoted" quando vuoi dire: "cerca un file con questo nome nella directory include della mia applicazione, tuttavia, se non può essere trovato, cerca nella directory include del sistema".

Problemi correlati