Sono necessarie protezioni se le intestazioni contengono solo dichiarazioni?

4

Considera le seguenti ipotesi sulla programmazione in C (alcune delle quali vanno troppo avanti, lo confesso):

  • L'inserimento di definizioni di variabili in un file di intestazione non è corretto, poiché ogni unità di traduzione crea la propria copia dei dati. E se è extern e utilizzato da più di un posto, otteniamo UB. L'uso corretto è quello di dichiarare le variabili nei file di intestazione e definirli nei corrispondenti file di implementazione.

  • Le macro sono in cattive condizioni e solitamente possono essere convertite in variabili o funzioni.

  • La ridichiarazione delle funzioni è completamente legale.

FORNITO quanto sopra è seguito, include le guardie diventano inutili. Esiste un'eccezione per le funzioni inline , che devono essere definite nell'intestazione, ma molti progetti non le usano.

Dato tutto ciò, perché la protezione include uno standard del settore? La maggior parte degli IDE li aggiunge automaticamente al momento della creazione del file.

    
posta Vorac 27.11.2015 - 08:24
fonte

1 risposta

10

In molti (la maggior parte?) progetti non banali, i file di intestazione contengono typedef dichiarazioni o struct definizioni. Nessuno di questi è permesso di essere ripetuto in una singola unità di traduzione (file sorgente preelaborato).

Dato che ci sono elementi non ripetibili che sono comunemente collocati nei file di intestazione, e quegli elementi appartengono anche a un file di intestazione, è diventato automatico per i programmatori C (e C ++) inserire le protezioni nelle intestazioni.

In C ++, è ancora più comune, poiché le funzioni inline vengono utilizzate molto di più e le definizioni di classe hanno la stessa restrizione delle definizioni di struct che non possono essere ripetute.

    
risposta data 27.11.2015 - 08:48
fonte

Leggi altre domande sui tag