Наша компания приобретет большой и очень сложный фрагмент исходного кода для спутниковой связи. Он написан на C ++, и мы будем кодировать дополнения к нему, также на C ++, связывая наш код с приобретенным кодом в единый исполняемый модуль.
Звучит хорошо!
Необходимо ли использовать тот же компилятор и ту же версию компилятора, которая использовалась для разработки приобретенного кода?
Говоря в общем, нет, это не нужно. Цель C ++ состоит в том, чтобы выступать в качестве абстракции над такими вещами, поэтому хорошо написанная программа на C ++ будет скомпилирована так же хорошо в вашей цепочке инструментов, как и в оригинальной, и полученная программа будет иметь тот же результат. Производительность может отличаться, потому что разные компиляторы хороши в разных вещах, но основное поведение программы не должно меняться.
Однако плохо написанное программное обеспечение может полагаться на поведение, зависящее от реализации, или даже на неопределенное поведение. Он может делать предположения о встроенных типах или об порядковости платформы. Даже хорошо написанное программное обеспечение может не иметь другого выбора, кроме как полагаться на нестандартные расширения, которые недоступны в выбранной вами цепочке инструментов, или это может быть связано с тем, что не было необходимости тратить время на добавление слоя переносимости в течение оригинальный проект.
В конечном итоге вам нужно будет спросить автора / поставщика, для чего написан исходный код. Если они утверждают, что они специально написаны для, скажем, Visual Studio 2015 и требуют функций Windows API, вам, вероятно, следует придерживаться этого. Но если они утверждают, что это переносимый стандарт C ++, используйте любой компилятор, который вам нравится. Убедитесь, что ваше соглашение о покупке включает в себя поддержку, чтобы вы могли получить бесплатную помощь, когда выясняется, что продавец лгал.
Нужно ли использовать ту же версию C ++, что и купленный код? Если он не использует 2014 год, возможно , мы захотим использовать некоторые его функции, но не в том случае, если могут возникнуть проблемы со смешиванием разных версий.
Наверное. Может быть.
C ++ 03 по большей части совместим с прямым интерфейсом, поэтому, если код C ++ 03, у вас вряд ли возникнут проблемы. (Хотя некоторые настройки могут потребоваться.)
Но функции, представленные в C ++ 11 и C ++ 14, не являются обратно совместимыми, поэтому, если поставщик использовал, скажем, C ++ 11 лямбда-выражения, и вы пытаетесь построить их код в компиляторе C ++ 03, который только что выиграл не работает
В теории, конечно, это не должно иметь значения, особенно языковая версия, но возможно, что разные версии компилятора будут генерировать разные объектные коды, что может привести к разнице во времени и т. Д.
Абсолютно. Если код так сильно зависит от конкретной реализации, чтобы получить ожидаемые результаты, то поставщик должен нести ответственность и сообщить вам об этом. Поскольку мы живем в реальном мире, я рекомендую быть усердным и спросить их в первую очередь.
И я повторю то, что сказали другие: убедитесь, что у вас есть какое-то обращение за поддержкой, чтобы, если они искажают какой-либо из ответов на эти вопросы (умышленно или нет), вы не в конечном итоге взвалили на себя расходы.