Perché dobbiamo scrivere un file di intestazione?

11

Prima di tirare fuori i tuoi commenti snarky, lo so - questa è una domanda sgradevole. Questa è la mia prima volta che uso un linguaggio basato su C.

Sono uno studente non laureato che sta imparando l'obiettivo C per un corso di informatica sullo sviluppo mobile. So che, in ambito accademico, non sono necessarie molte considerazioni sul mondo reale poiché stai costruendo progetti più piccoli, lavori in team più piccoli, ecc.

Ma il nostro professore richiede - e XCode supporta - .h file di intestazione per ogni file di implementazione .m. Per me, sembra un lavoro impegnativo. Devo assicurarmi di copiare ogni firma del metodo e la variabile di istanza sull'altro file. Se cambio un file, devo assicurarmi che sia coerente con l'altro file. Sembra solo un po 'di piccoli fastidi come quello.

Ma so che ci deve essere alcuni uso reale per i file header. Una grande risposta riguarderebbe entrambi:

  1. Che cosa è un file di intestazione utile per un file di implementazione non adatto? Qual è il suo scopo?
  2. Perché noi programmatori dobbiamo scrivere manualmente i nostri file di intestazione? Sembra che possano essere generati facilmente automaticamente.

Grazie in anticipo!

    
posta Hartley Brody 20.10.2011 - 17:23
fonte

4 risposte

9
  1. In breve;

    • Il file di intestazione definisce l'API per un modulo. È un contratto che elenca i metodi che una terza parte può chiamare. Il modulo può essere considerato una scatola nera per terze parti.

    • L'implementazione implementa il modulo. È l'interno della scatola nera. Come sviluppatore di un modulo devi scrivere questo, ma come utente di un modulo di terze parti non dovresti aver bisogno di sapere nulla dell'implementazione. L'intestazione dovrebbe contenere tutte le informazioni necessarie.

  2. Alcune parti di un file di intestazione possono essere generate automaticamente - le dichiarazioni del metodo. Ciò richiederebbe di annotare l'implementazione in quanto potrebbero esserci metodi privati nell'implementazione che non fanno parte dell'API e non appartengono all'intestazione.

I file di intestazione a volte contengono altre informazioni; definizioni di tipo, definizioni costanti, ecc. Queste appartengono al file di intestazione e non all'implementazione.

    
risposta data 20.10.2011 - 17:30
fonte
5

Il motivo principale per un'intestazione è di poter #include in qualche altro file, quindi puoi usare le funzioni in un file da quell'altro file. L'intestazione include (solo) abbastanza per essere in grado di utilizzare le funzioni, non le funzioni stesse, quindi (speriamo) la sua compilazione sia considerevolmente più veloce.

Mantenere i due risultati separati separatamente da nessuno che abbia mai scritto un editor che automatizzi il processo molto bene. Non c'è davvero un sacco di motivi per cui non potremmo fare così, e alcuni hanno persino provato a farlo - ma gli editori che lo hanno fatto non hanno mai fatto molto bene sul mercato, e più mainstream gli editori non l'hanno adottato.

    
risposta data 20.10.2011 - 17:35
fonte
2

Includere un'intestazione consente al tuo codice di chiamare funzioni o metodi che sono scritti altrove e che possono o meno far parte del tuo progetto / build del software, ma che possono essere trovati dal 'linker' quando stai costruendo il software .

Ad esempio, quando chiami una funzione nella libreria C standard, non vuoi dover inserire tutti gli elementi interni di quella funzione all'interno del tuo progetto - semplicemente ti aspetti che il tuo programma sia in grado di chiamarlo.

Ma al compilatore deve essere detto che la funzione esiste da qualche parte anche se non può vedere il codice e l'intestazione lo fa. Al termine del compilatore, il linker viene chiamato e sembra "linkare" quei bit del codice che vengono lasciati a penzoloni, come ad esempio le chiamate alle librerie.

    
risposta data 20.10.2011 - 17:54
fonte
1

I file di intestazione sono utilizzati principalmente per dichiarare e includere le firme (vale a dire il nome della funzione, il valore restituito e gli argomenti) delle tue funzioni in altri file. Il compilatore deve conoscere queste firme durante la compilazione e il collegamento dei file insieme.

Leggi questo articolo per ulteriori informazioni.

    
risposta data 20.10.2011 - 17:31
fonte

Leggi altre domande sui tag