¿Qué es una "unidad de traducción" en C++?
Estoy leyendo en ese momento "Effective C++" escrito por Scott Meyers y encontré el término "unidad de traducción".
¿Alguien podría darme una explicación de lo siguiente?
¿Qué es exactamente?
¿Cuándo debería considerar usarlo mientras programo con C++?
¿Es solo C++ o se puede utilizar con otros lenguajes de programación?
Quizás ya lo use sin conocer el término...
Desde aquí : ( enlace de la máquina wayback )
Según el estándar C++ ( enlace de wayback machine ): una unidad de traducción es la unidad básica de compilación en C++. Consiste en el contenido de un único archivo fuente, más el contenido de cualquier archivo de encabezado incluido directa o indirectamente en él, menos aquellas líneas que se ignoraron mediante declaraciones de preprocesamiento condicional.
Una única unidad de traducción se puede compilar en un archivo objeto, biblioteca o programa ejecutable.
La noción de unidad de traducción se menciona con mayor frecuencia en los contextos de la Regla de una definición y las plantillas.
Una unidad de traducción es, a todos los efectos, un archivo (.c/.cpp), una vez finalizado, incluye todos los archivos de encabezado.
http://web.archive.org/web/20091213073754/http://msdn.microsoft.com/en-us/library/bxss3ska(VS.80).aspx
Una pregunta difícil de responder definitivamente. El estándar C++ establece:
El texto del programa se guarda en unidades denominadas archivos fuente en esta Norma Internacional. Un archivo fuente junto con todos los encabezados (17.4.1.2) y archivos fuente incluidos (16.2) mediante la directiva de preprocesamiento #include, menos las líneas fuente omitidas por cualquiera de las directivas de preprocesamiento de inclusión condicional (16.1), se denomina unidad de traducción. [Nota: no es necesario traducir todos los programas en C++ al mismo tiempo. ]
Entonces, para la mayoría de los efectos, 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 #include del preprocesador.
Respecto a tus otras preguntas:
- ¿Cuándo debería considerar usarlo al programar con C++?
No puedes no usarlo: las unidades de traducción son la base de un programa C++.
- Si está relacionado sólo con C++, o puede usarse con otros lenguajes de programación
Otros lenguajes tienen conceptos similares, pero su semántica será sutilmente diferente. La mayoría de los demás lenguajes no utilizan un preprocesador, por ejemplo.
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.
Una unidad de traducción es un código que se pasa al compilador propiamente dicho. Por lo general, esto significa el resultado de ejecutar el preprocesador en el archivo .c.