Perché, come hai detto tu stesso, non è possibile mettere "l'intero software" in un unico file sorgente.
Se il tuo programma è molto piccolo, allora sì è più semplice mettere tutto in un file .c. Man mano che il programma diventa più grande, diventa utile organizzare le cose mettendo insieme le relative funzioni in diversi file .c. Inoltre, nei file .h è possibile limitare le dichiarazioni che si danno alle dichiarazioni di cose che sono supposte da utilizzare in altri file .c. Se un file .c non contiene nulla che dovrebbe essere accessibile al di fuori di se stesso, non ha bisogno di intestazione.
Ad esempio, se .c ha funzione foo() e fooHelper(), ma nessuno tranne foo() dovrebbe chiamare fooHelper() direttamente, poi mettendo foo() e fooHelper() in foo.c, solo inserendo la dichiarazione di foo() in foo.h e dichiarando fooHelper() come statico, si contribuisce a far rispettare le altre parti del proprio programma che dovrebbero solo accedere a foo() e non dovrebbero sapere o preoccuparsi di fooHelper(). Una specie di forma di incapsulamento non orientata agli oggetti.
Infine, i motori sono in genere abbastanza intelligenti da ricostruire solo i file che sono stati modificati dall'ultima build, quindi la suddivisione in più file .c (utilizzando i file .h per condividere ciò che deve essere condiviso) aiuta a velocizzare le build.
fonte
2009-07-22 20:12:35
se ho le dichiarazioni che devono essere condivisi da più file e non corrispondono logicamente ad un file .c? diciamo, alcuni # define, che sono usati dalla maggior parte dei file. Non è meglio creare un file di intestazione con tutti questi? qualcosa di neutrale che non si associa a un file .c? –
Sì. L'idea è che ogni intestazione contenga un gruppo di dichiarazioni correlate l'una all'altra. Nella maggior parte dei casi si adatta a ciascun file .c un h. Corrispondente, ma è possibile aggiungere file .h aggiuntivi (ad esempio per definire costanti globali o enumerazioni). In definitiva, sei responsabile di come usi le intestazioni per organizzare il tuo codice. –
@JasonWilliams: Oppure file .c extra, qualsiasi cosa sia appropriata. – Deduplicator