Qué es una “unidad de traducción” en C ++

Estoy leyendo en ese momento el “C ++ efectivo” escrito por Meyers y encontré el término “unidad de traducción”.

¿Podría alguien darme una explicación de:

1) ¿Qué es exactamente?

2) ¿Cuándo debería considerar usarlo cuando programo con C ++?

3) Si está relacionado solo con C ++, o puede usarse con otros lenguajes de progtwigción

Puede que ya lo use sin saber el término …

Desde aquí : ( enlace de la máquina de retorno )

De acuerdo con el estándar C ++ ( enlace máquina de ida y vuelta ): una unidad de traducción es la unidad básica de comstackción en C ++. Consiste en los contenidos de un solo archivo de origen, más los contenidos de los archivos de encabezado incluidos directa o indirectamente por él, menos aquellas líneas que fueron ignoradas usando declaraciones de preprocesamiento condicional.

Se puede comstackr una sola unidad de traducción en un archivo objeto, biblioteca o progtwig ejecutable.

La noción de una unidad de traducción se menciona con mayor frecuencia en los contextos de la Regla de una sola definición y las plantillas.

Una unidad de traducción es, a todos los efectos, un archivo (.c / .cpp), una vez que ha finalizado, incluye todos los archivos de cabecera.

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

Una pregunta difícil de responder definitivamente. El estándar C ++ establece:

El texto del progtwig se guarda en unidades denominadas archivos fuente en este Estándar Internacional. Un archivo fuente junto con todos los encabezados (17.4.1.2) y los archivos fuente incluidos (16.2) a través de la directiva de preprocesamiento #include, menos cualquier línea fuente omitida por cualquiera de las directivas de preprocesamiento de inclusión condicional (16.1), se denomina unidad de traducción. [Nota: un progtwig C ++ no necesita ser traducido al mismo tiempo. ]

Por lo tanto, para la mayoría de los bashs y propósitos, una unidad de traducción es un único archivo fuente de C ++ y el encabezado u otros archivos que incluye a través del mecanismo de preprocesador #include.

En cuanto a tus otras preguntas:

2) ¿Cuándo debería considerar usarlo cuando programo con C ++?

No puede considerarlo: las unidades de traducción son la base de un progtwig en C ++.

3) Si está relacionado solo con C ++, o puede usarse con otros lenguajes de progtwigción

Otros lenguajes tienen conceptos similares, pero su semántica será sutilmente diferente. La mayoría de los otros idiomas no usan un preprocesador, por ejemplo.

El libro lo aclara lo suficiente. Cuando Meyers se refiere a una “Unidad de traducción”, se refiere a un archivo de código fuente.

Además de la ODR, la unidad de traducción es importante en la definición de espacios de nombres sin nombre, que reemplaza uno de los usos antiguos de “estática”.

Supongo que todavía no tengo suficientes puntos para agregar un comentario en la respuesta superior.

Una unidad de traducción es un código que se pasa al comstackdor propiamente dicho. Esto normalmente significa que la salida de ejecutar el preprocesador en el archivo .c.

Los progtwigs C y C ++ consisten en uno o más archivos fuente, cada uno de los cuales contiene parte del texto del progtwig. Un archivo fuente, junto con sus archivos de inclusión (archivos que se incluyen con la directiva del preprocesador #include) pero sin incluir las secciones de código eliminadas por las directivas de comstackción condicional, como #if, se denomina “unidad de traducción”.

Según MSDN : los progtwigs C y C ++ consisten en uno o más archivos fuente, cada uno de los cuales contiene parte del texto del progtwig. Un archivo fuente, junto con sus archivos de inclusión (archivos que se incluyen con la directiva del preprocesador #include) pero sin incluir las secciones de código eliminadas por las directivas de comstackción condicional, como #if, se denomina “unidad de traducción”.

Cada archivo cpp / c (implementación) se convertirá en una unidad de traducción (es decir, archivo de objeto (.obj)) los encabezados en el archivo cpp se reemplazarán por el texto real de los archivos de encabezado.

Como han dicho otros, una unidad de traducción es básicamente el contenido de un archivo fuente después del preprocesamiento. Es la producción más alta en la gramática del lenguaje; solo tendrías que preocuparte si estuvieras escribiendo un comstackdor C o C ++.

En mi opinión, una “unidad de traducción” suele ser un único archivo fuente “posterior al procesamiento”. Puede obtener más detalles en esta página de MSDN. http://msdn.microsoft.com/en-us/library/bxss3ska(v=vs.80).aspx