Наша компанія придбає великий і дуже складний фрагмент вихідного коду для супутникового зв'язку. Він кодується в C ++, і ми будемо кодувати доповнення до нього, також в C ++, пов'язуючи наш код із придбаним кодом в єдиний виконуваний блок.
Звучить добре!
Чи потрібно, щоб ми використовували той самий компілятор і ту саму версію компілятора, яку використовували для розробки придбаного коду?
Якщо говорити взагалі, ні це не потрібно. Мета C ++ - діяти як абстракція над цими речами, тому добре написана програма C ++ складе так само добре на вашій інструментальній ланцюжку, як і в оригінальній авторській програмі, і отримана програма матиме такий самий результат. Продуктивність може відрізнятися, оскільки різні компілятори хороші в різних речах, але принципова поведінка програми не повинна змінюватися.
Однак, програмне забезпечення, що погано пишеться, може покладатися на поведінку, що залежить від впровадження, або навіть невизначену поведінку. Це може робити припущення про вбудовані типи або про витривалість платформи. Навіть добре написане програмне забезпечення може не мати іншого вибору, окрім як покластися на нестандартні розширення, які недоступні у вибраному ланцюжку інструментів, або це може зробити так, оскільки просто не потрібно було витрачати час на додавання шару переносимості протягом тривалості оригінальний проект.
Зрештою, вам потрібно буде запитати автора / продавця, для чого написаний вихідний код. Якщо вони стверджують, що це спеціально написано проти, скажімо, Visual Studio 2015 і вимагає функцій API Windows, ви, мабуть, повинні дотримуватися цього. Але якщо вони заявляють, що це портативний, стандартний C ++, то використовуйте будь-який компілятор, який вам подобається. Переконайтеся, що ваша угода про купівлю містить домовленість про підтримку, щоб ви могли отримати безкоштовну допомогу, коли виявиться, що продавець брехав.
Чи потрібно, щоб ми використовували ту саму версію C ++, що і придбаний код? Якщо він не використовує 2014 року, ми могли б хотіти використовувати деякі особливості цього, але якщо там можуть бути деякі проблеми з змішування різних версій.
Ймовірно. Можливо.
C ++ 03 здебільшого сумісний вперед, тому, якщо код C ++ 03, у вас навряд чи виникнуть проблеми. (Хоча можуть знадобитися певні налаштування.)
Але функції, введені в C ++ 11 і C ++ 14, не сумісні з зворотним зв'язком, тому якщо постачальник використовував, скажімо, C ++ 11 лямбда, і ви намагаєтеся створити їх код у компіляторі C ++ 03, який щойно виграв не працюю.
Теоретично, звичайно, це не повинно мати значення, особливо мовна версія, але можливо, що різні версії компілятора будуть генерувати різний об'єктний код, що потенційно може призвести до відмінностей у часі тощо.
Абсолютно. Якщо код так сильно покладається на конкретну реалізацію для отримання очікуваних результатів, то відповідальність та інформування вас про це залежить від продавця. Оскільки ми живемо в реальному світі, то рекомендую бути старанними і питати їх в першу чергу.
І я наголошу на тому, що сказали інші: переконайтеся, що у вас є якийсь спосіб звернення за підтримкою, щоб, якщо вони неправильно представили будь-яку відповідь на ці запитання (навмисно чи іншим чином), ви не закінчилися збивати отриману вартість.