Nuestra compañía comprará un código fuente grande y muy complejo para comunicaciones satelitales. Está codificado en C ++ y codificaremos adiciones a él, también en C ++, vinculando nuestro código con el código comprado en una sola unidad ejecutable.
¡Suena bien!
¿Es necesario que usemos el mismo compilador y la misma versión del compilador que se utilizó para desarrollar el código comprado?
Hablando en general, no, no es necesario. El propósito de C ++ es actuar como una abstracción sobre este tipo de cosas, por lo que un programa C ++ bien escrito se compilará tan bien en su cadena de herramientas como lo hizo en el autor original, y el programa resultante tendrá el mismo resultado. El rendimiento puede variar, porque diferentes compiladores son buenos en diferentes cosas, pero el comportamiento fundamental del programa no debe cambiar.
Sin embargo, el software mal escrito puede depender de un comportamiento específico de implementación, o incluso un comportamiento indefinido. Puede hacer suposiciones sobre los tipos incorporados, o sobre la resistencia de la plataforma. Incluso el software bien escrito puede no tener más remedio que confiar en extensiones no estándar que no están disponibles en la cadena de herramientas elegida, o puede hacerlo porque simplemente no había necesidad de pasar tiempo agregando una capa de portabilidad dentro de la duración de El proyecto original.
En última instancia, deberá preguntarle al autor / proveedor para qué está escrito el código fuente. Si afirman que está específicamente escrito en contra de, por ejemplo, Visual Studio 2015, y requiere características de la API de Windows, probablemente debería quedarse con eso. Pero si afirman que es portátil, C ++ estándar, utilice el compilador que desee. Asegúrese de que su acuerdo de compra incluya un acuerdo de soporte para que pueda obtener ayuda gratuita cuando resulte que el vendedor estaba mintiendo.
¿Es necesario que usemos la misma versión de C ++ que el código comprado? Si no está usando 2014, es posible que deseemos usar algunas características, pero no si puede haber algunos problemas al mezclar diferentes versiones.
Probablemente. Tal vez.
C ++ 03 es compatible con la mayoría de las versiones, por lo tanto, si el código es C ++ 03, es poco probable que tenga un problema. (Aunque pueden ser necesarios algunos ajustes).
Pero las características introducidas en C ++ 11 y C ++ 14 no son compatibles con versiones anteriores, por lo que si el proveedor usó, por ejemplo, C ++ 11 lambdas, e intenta construir su código en un compilador C ++ 03, eso acaba de ganar No funciona
En teoría, por supuesto, no debería importar, especialmente la versión del idioma, pero es concebible que las diferentes versiones del compilador generarán diferentes códigos de objeto, lo que podría generar diferencias de tiempo, etc.
Absolutamente. Si el código se basa tanto en una implementación específica para obtener los resultados esperados, entonces depende del vendedor ser responsable e informarle al respecto. Como vivimos en el mundo real, recomiendo ser diligente y preguntarles primero.
Y haré eco de lo que otros han dicho: asegúrese de tener algún tipo de recurso de apoyo, de modo que si tergiversan alguna de las respuestas a estas preguntas (ya sea intencionalmente o no) no termine asumiendo el costo resultante.