2013-09-30 11 views
15

Sono nuovo alla programmazione in c e stavo codificando alcuni semplici programmi in stile "Hello world".cosa fa #include <stdio.h> in un programma c

In tutti questi programmi ho inserito #include<stdio.h> nella parte superiore, ma non sono sicuro di cosa significhi esattamente. L'ho cercato su google e ho scoperto che stdio.h è un file che ha comandi per il preprocessore, ma cos'è un preprocessore? Ho pensato che quando scrivo il codice, lo compilo e il mio codice si trasforma in un modulo che un "computer" può leggere e quindi posso eseguirlo. Qualcuno può spiegarmi come si usa questo comando?

+0

http://en.wikipedia.org/wiki/C_preprocessor –

+0

@ Nat95 SO non è un forum in cui si presenta una soluzione, SO vuole diffondere la conoscenza. Quindi le risposte in forma di un singolo link non sono i benvenuti allo stack overflow. Una risposta dovrebbe essere scritta da qualcuno che CONOSCE la risposta. e potresti spiegartelo.quindi evita di chiedere link o risorse esterne al sito. – dhein

+1

ok! non lo sapevo! grazie @Zaibis – yaylitzis

risposta

26

Cerca il file stdio.h e lo copia efficacemente incollandolo al posto di queste istruzioni #include. Questo file contiene i cosiddetti prototipi di funzioni di funzioni come printf(), scanf(), ... in modo che il compilatore sappia quali sono i loro parametri e valori di ritorno.

+0

ok, quindi quando uso printf il codice che implementa printf si trova in stdio.h? potrei implementare la mia versione di printf (so che è sciocco farlo, ma diciamo ..)? – yaylitzis

+0

@ Nat95: No, il codice per la funzione printf non è in stdio.h, solo la definizione della funzione. Il linker in seguito risolve questo quando si collega alla libreria standard. Potresti assolutamente scrivere la tua funzione printf. – Lucas

+0

+1 questa è di gran lunga la spiegazione migliore e più semplice di ciò che il preprocessore fa effettivamente con #include. Si può vedere questo se si istruisce il compilatore/sistema di compilazione per mantenere i file preelaborati. – stijn

9

La spiegazione più semplice potrebbe essere che il tuo programma chiama o utilizza molte funzioni il cui codice non fa parte del programma stesso. Ad es. se scrivi "printf" nel tuo codice per stampare qualcosa, il compilatore non sa cosa fare con quella chiamata.

stdio.h è il luogo in cui si trovano le informazioni per quella stampante.

Aggiornamento:

Piuttosto il prototipo di della funzione printf (nome, tipo di ritorno e parametri) risiedono in stdio.h. Questo è tutto richiesto nella fase di compilazione. Il codice effettivo di printf è incluso nella fase di collegamento, che viene dopo la compilazione.

L'istruzione include inserisce sostanzialmente tutti i prototipi di funzione PRIMA della compilazione effettiva. Da qui il nome del preprocessore.

Aggiornamento 2:

Poiché la questione incentrata sulla includono dichiarazione (e l'OP ha chiesto anche di scrittura definizione delle funzioni se stesso, un altro aspetto importante è che se è scritto come (notare le parentesi angolari)

#include <stdio.h> 

il preprocessore presuppone, è un colpo di testa libreria standard e guarda nelle cartelle di sistema prima in cui è stato installato il compilatore.

Se invece un pro Grammer definisce una funzione da lui stesso e posizionare il file .h nella directory di lavoro corrente, avrebbe usato (notare le virgolette)

#include "stdio.h" 

Following illustra e il comportamento è portabile su tutte le piattaforme.

+0

ok, quindi quando uso printf il codice che implementa il printf si trova in stdio.h? potrei implementare la mia versione di printf (so che è sciocco farlo, ma diciamo ..)? – yaylitzis

+0

Sì, puoi farlo. Per favore, comprendi che la mia risposta sopra è eccessivamente semplificata. Ma è il concetto giusto da cui partire. Mentre andiamo in profondità, potresti vedere molti dettagli. Ho scritto una versione più recente di printf nel mio primo corso di programmazione di BSc più di un decennio fa. Ciò comportava l'accesso diretto alla memoria video e la scrittura su specifici indirizzi tramite puntatori. – fayyazkl

+0

Per chiarire, ci sono file .h e ci sono file .c. I file h contengono solo prototipi di funzioni, cioè dì che nome di funzione, tipo di ritorno e parametri sono. La definizione attuale si trova nella fase di collegamento, che viene dopo la compilazione. – fayyazkl

0

Indica al compilatore di utilizzare funzioni, strutture, macro ed ecc. Dal file sdtio.h, che rappresenta una parte di glibc (o qualunque sia la libreria C standart ottenuta). Il compilatore aggiunge anche record all'eseguibile di output "to-link list", che dovrebbe essere collegato alla libreria C standart.