Che cos’è una “unità di traduzione” in C ++

All’epoca sto leggendo “Effective C ++” scritto da Meyers e ho trovato il termine “unità di traduzione”.

Qualcuno potrebbe darmi una spiegazione di:

1) Che cosa è esattamente

2) Quando dovrei considerare di usarlo durante la programmazione con C ++

3) Se è collegato solo a C ++, o può essere utilizzato con altri linguaggi di programmazione

Potrei già usarlo senza conoscere il termine ….

Da qui : ( collegamento macchina wayback )

Secondo lo standard C ++ ( wayback machine link ): un’unità di traduzione è l’unità di base della compilazione in C ++. Consiste del contenuto di un singolo file sorgente, oltre al contenuto di qualsiasi file di intestazione direttamente o indirettamente incluso da esso, meno quelle righe che sono state ignorate usando istruzioni di pre-elaborazione condizionale.

Una singola unità di traduzione può essere compilata in un file object, una libreria o un programma eseguibile.

La nozione di un’unità di traduzione è più spesso menzionata nei contesti della regola di una definizione e dei modelli.

Un’unità di traduzione è a tutti gli effetti un file (.c / .cpp), dopo aver finito di includere tutti i file di intestazione.

http://msdn.microsoft.com/en-us/library/bxss3ska%28VS.80%29.aspx

Una domanda difficile a cui rispondere in modo definitivo. Lo standard C ++ afferma:

Il testo del programma è conservato in unità chiamate file sorgente in questo standard internazionale. Un file sorgente insieme a tutte le intestazioni (17.4.1.2) e ai file sorgente inclusi (16.2) tramite la direttiva di preelaborazione # include, meno le linee di origine ignorate da una qualsiasi delle direttive di pre-elaborazione di inclusione condizionale (16.1), è chiamata unità di traduzione. [Nota: un programma C ++ non deve necessariamente essere tradotto allo stesso tempo. ]

Quindi per la maggior parte degli scopi una unità di traduzione è un singolo file sorgente C ++ e l’intestazione o altri file che include tramite il meccanismo #include del preprocessore.

Per quanto riguarda le altre tue domande:

2) Quando dovrei considerare di usarlo durante la programmazione con C ++

Non puoi non prenderlo in considerazione: le unità di traduzione sono la base di un programma C ++.

3) Se è collegato solo a C ++, o può essere utilizzato con altri linguaggi di programmazione

Altre lingue hanno concetti simili, ma la loro semantica sarà sottilmente diversa. La maggior parte delle altre lingue non usa un preprocessore, per esempio.

Il libro lo rende abbastanza chiaro. Quando Meyers fa riferimento a una “unità di traduzione”, indica un file di codice sorgente.

Oltre all’ODR, l’unità di traduzione è importante nella definizione degli spazi dei nomi senza nome, che sostituisce uno dei vecchi usi di “statico”.

Suppongo di non avere ancora abbastanza punti per aggiungere un commento sotto la risposta principale.

Un’unità di traduzione è un codice che viene passato al compilatore corretto. Ciò significa in genere l’output dall’esecuzione del preprocessore sul file .c.

I programmi C e C ++ sono costituiti da uno o più file sorgente, ognuno dei quali contiene parte del testo del programma. Un file sorgente, insieme ai file di inclusione (file inclusi usando la direttiva #include preprocessore) ma senza includere le sezioni di codice rimosse dalle direttive di compilazione condizionale come #if, viene chiamato “unità di traduzione”.

Secondo MSDN : i programmi C e C ++ sono costituiti da uno o più file sorgente, ognuno dei quali contiene parte del testo del programma. Un file sorgente, insieme ai file di inclusione (file inclusi usando la direttiva #include preprocessore) ma senza includere le sezioni di codice rimosse dalle direttive di compilazione condizionale come #if, viene chiamato “unità di traduzione”.

Ogni file cpp / c (implementazione) verrà convertito in una unità di traduzione (cioè., Le intestazioni di file object (.obj)) nel file cpp saranno sostituite con il testo effettivo dai file di intestazione.

Come altri hanno già detto, un’unità di traduzione è fondamentalmente il contenuto di un file sorgente dopo la pre-elaborazione. È la produzione più alta nella grammatica della lingua; dovresti preoccuparti solo se stai scrivendo un compilatore C o C ++.

Dal mio punto di vista, una “unità di traduzione” è in genere un singolo file sorgente “post-preelaborazione”. È ansible ottenere maggiori dettagli su questa pagina MSDN. http://msdn.microsoft.com/en-us/library/bxss3ska(v=vs.80).aspx