我们公司将购买大量且非常复杂的卫星通信源代码。它使用C ++进行编码,我们还将使用C ++对其添加的代码进行编码,将我们的代码与购买的代码链接到单个可执行单元中。
听起来不错!
是否有必要使用与开发购买的代码相同的编译器和相同的编译器版本?
一般而言,没有必要。C ++的目的是作为对此类事物的抽象,因此,编写良好的C ++程序在您的工具链上的编译效果将与在原始作者上进行的一样好,并且所得程序将具有相同的结果。性能可能会有所不同,因为不同的编译器擅长于不同的事情,但是程序的基本行为不应改变。
但是,写得不好的软件可能依赖于特定于实现的行为,甚至取决于未定义的行为。它可以对内置类型或平台的字节序进行假设。甚至是写得很好的软件也别无选择,只能依靠您选择的工具链上不存在的非标准扩展,或者这样做是因为根本没有必要在更新期间内花费时间来添加可移植层。原始项目。
最终,您将需要询问作者/供应商源代码是做什么的。如果他们声称它是针对Visual Studio 2015专门编写的,并且需要Windows API功能,则您可能应该坚持这样做。但是,如果他们声称它是可移植的标准C ++,那么请使用您喜欢的任何编译器。确保您的购买协议包括支持安排,以便在事实证明卖方在撒谎时可以获取免费帮助。
我们是否必须使用与所购买代码相同的C ++版本?如果未使用2014,则可能要使用它的某些功能,但是如果混合使用不同版本可能会出现问题,则不要使用。
大概。也许。
C ++ 03在大多数情况下都是向前兼容的,因此,如果代码是C ++ 03,则您不太可能遇到问题。(尽管可能需要一些调整。)
但是C ++ 11和C ++ 14中引入的功能不向后兼容,因此,如果供应商使用了C ++ 11 lambda,而您尝试在C ++ 03编译器中构建其代码,那将是成功的。不行
从理论上讲,当然,这无关紧要,尤其是语言版本,但是可以想象,不同版本的编译器将生成不同的目标代码,从而可能导致时序差异等。
绝对。如果代码在很大程度上依赖于特定的实现以获得预期的结果,则由供应商负责并通知您。由于我们生活在现实世界中,因此我建议您勤奋工作并先问他们。
我将回应其他人所说的话:确保您拥有某种形式的支持资源,这样,如果他们对这些问题的回答(无论是有意还是无意的)都误导了,您最终都不会承担由此产生的费用。