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

6 minutos de lectura

¿Que es una unidad de traduccion en C
Harry

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

Alguien podría por favor darme una explicación de:

  1. ¿Qué es exactamente?

  2. ¿Cuándo debo considerar usarlo mientras programo con C++?

  3. ¿Está relacionado solo con C ++ o también se puede usar con otros lenguajes de programación?

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

  • 2. Ya está utilizando la unidad de traducción si ha incluido archivos de encabezado. Es un término usado como referencia y no una construcción de C++ por decir

    – talekeDskobeDa

    19 sep 2019 a las 15:57

1647588488 740 ¿Que es una unidad de traduccion en C
jeffh

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

De acuerdo a C++ estándar (enlace de la máquina wayback) : Una unidad de traducción es la unidad básica de compilación en C++. Consiste en el contenido de un solo archivo de origen, más el contenido de cualquier archivo de encabezado incluido directa o indirectamente en él, menos aquellas líneas que se ignoraron mediante instrucciones de preprocesamiento condicional.

Una sola unidad de traducción se puede compilar en un archivo de objeto, una biblioteca o un programa ejecutable.

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

  • ¿Se usa el término solo en C/C++?

    – dekuArbusto

    18 de abril de 2018 a las 9:21

  • @dekuShrub de hecho, no. Por ejemplo, en Rust, una unidad de traducción es una caja, en C++ lo mismo se denominaría una biblioteca completa. El término en sí es universal, pero definitivamente comenzó con C.

    – Sashahae

    6 de diciembre de 2019 a las 18:02


  • Nueva referencia que establece aproximadamente lo que dice esta respuesta: en.wikipedia.org/wiki/Translation_unit_(programación)

    – Gabriel grapas

    11 de mayo de 2020 a las 17:09


Una unidad de traducción es para todos los efectos un archivo (.c/.cpp), después ha terminado incluyendo todos los archivos de encabezado.

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

  • Incluyendo archivos de cabecera. El compilador procesa los archivos de encabezado, incluso si no se genera ningún código. Consulte también el comentario del preprocesador de JeffH, la definición “todo lo que ve el compilador” es buena.

    –Marco van de Voort

    9 de julio de 2009 a las 20:08

  • Puede compilar archivos que terminan en “.h” muy bien. El nombre del archivo no es importante en absoluto. El contenido es. Si el contenido de “foo.h” es “int main() { }”, puede compilarlo.

    – Johannes Schaub – litb

    9 de julio de 2009 a las 21:11

  • @GManNickG: ¿Qué tal “los archivos .h convencionalmente no se alimentan directamente al compilador”.

    – Carreras de ligereza en órbita

    5 de febrero de 2013 a las 1:38

  • @JohannesSchaub-litb Creo que te refieres a vincular, no a compilar. Puede compilar cualquier archivo siempre que sea C/C++ correcto con todos los nombres definidos. Sería inútil compilar un archivo de encabezado ya que el objetivo principal de un archivo de encabezado es incluirlo (leer y copiar) en los archivos de origen, por lo que ya se están compilando cuando compila un archivo de origen que lo incluye. Supongo que lo que quisiste decir es que no puedes crear un ejecutable a partir de un archivo que no tiene una función principal.

    – pooya13

    28 de marzo de 2019 a las 2:32

  • El enlace ahora está inactivo/la documentación se retiró.

    – Gabriel grapas

    11 mayo 2020 a las 17:11

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

El texto del programa se mantiene en unidades denominadas archivos fuente en esta Norma Internacional. Un archivo de origen junto con todos los encabezados (17.4.1.2) y los archivos de origen incluidos (16.2) a través de la directiva de preprocesamiento #include, menos las líneas de origen omitidas por cualquiera de las directivas de preprocesamiento de inclusión condicional (16.1), se denomina unidad de traducción. [Note: a C++
program need not all be translated at
the same time. ]

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

Con respecto a tus otras preguntas:

  1. ¿Cuándo debo considerar usarlo cuando programo con C++?

No puede dejar de usarlo: las unidades de traducción son la base de un programa C++.

  1. Si está relacionado solo con C ++, o se puede usar con otros lenguajes de programación

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

  • No sé si eso aclara o no. Esta puede ser un área un tanto turbia: no está claro en el párrafo estándar que cité que los encabezados precompilados están permitidos, por ejemplo.

    luego

    9 de julio de 2009 a las 21:10

  • @GMan, y ahí es donde debes tener mucho cuidado con la regla de una definición. Si incluye una clase en diferentes unidades de traducción con definiciones ligeramente diferentes antes de que se incluya esa clase que hace que la clase tenga un código diferente, causará problemas indefinidos.

    – Precio mate

    9 de julio de 2009 a las 21:19

  • @GMan tenga en cuenta los dos términos utilizados por el Estándar: “encabezado” y “archivo fuente”. “header” solo se usa para la biblioteca estándar. Un archivo de usuario que está incluido en algún código no se llama “encabezado” por el Estándar, sino “archivo fuente”. The Standard no conoce la diferencia entre “.h” y “.cpp” que inventamos los pobres programadores de C++ 🙂

    – Johannes Schaub – litb

    9 de julio de 2009 a las 21:43

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

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

Supongo que todavía no tengo suficientes puntos para agregar un comentario debajo de la respuesta principal.

1647588488 555 ¿Que es una unidad de traduccion en C
jugo de sig

Una unidad de traducción es un código que se pasa al compilador propiamente dicho. Esto generalmente significa el resultado de ejecutar el preprocesador en el archivo .c.

1647588489 565 ¿Que es una unidad de traduccion en C
marmat de ganesh

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

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad