Estoy empezando a trabajar con una biblioteca de terceros y al compilarlo en Visual Studio 2010, noté que recibía esta advertencia de enlazador muchas veces (LNK4221). Miré las fuentes utilizadas en la creación de los archivos objeto que estaban siendo vinculados y encontré que toda la implementación de estos se encuentra en los archivos de encabezado. Curiosamente, también noté que el proyecto incluía archivos .cpp correspondientes que contenían solo un #include para el encabezado con la implementación.¿Cuál es el punto de un archivo .cpp que contiene solo un único #include?
Tengo curiosidad: ¿cuál es el sentido de esto y por qué querría utilizar esta técnica? Si los archivos .cpp no agregan ningún valor al proyecto, ¿por qué no debería simplemente eliminarlos para eliminar las advertencias del enlazador?
Intenté buscar preguntas similares, pero no encontré nada de interés. Si conoce alguno, por favor vinculelos.
Eso es una advertencia, no un error. –
Sí, lo sé. Me preocupa menos la advertencia que la técnica de usar archivos .cpp que contienen solo un único #include. –
Dos posibles motivaciones: 1 - Puede considerarse buena práctica tener siempre pares '.h' /' .cpp'. Tal vez el autor pensó que agregarían '.cpp' más tarde. 2 - Un archivo '.h' no se puede compilar en un archivo objeto, un archivo' .cpp' puede. – BoBTFish