Perusahaan kami akan membeli sepotong kode sumber yang besar dan sangat kompleks untuk komunikasi satelit. Ini dikodekan dalam C ++ dan kami akan menambahkan kode untuk itu, juga di C ++, menghubungkan kode kami dengan kode yang dibeli ke dalam satu unit yang dapat dieksekusi.
Kedengarannya bagus!
Apakah kita perlu menggunakan kompiler yang sama dan versi kompiler yang sama seperti yang digunakan untuk mengembangkan kode yang dibeli?
Berbicara secara umum, tidak, itu tidak perlu. Tujuan dari C ++ adalah untuk bertindak sebagai abstraksi atas hal-hal ini, sehingga program C ++ yang ditulis dengan baik akan mengkompilasi dengan baik pada toolchain Anda seperti yang dilakukan pada pembuat asli, dan program yang dihasilkan akan memiliki hasil yang sama. Kinerja dapat bervariasi, karena kompiler yang berbeda pandai dalam hal yang berbeda, tetapi perilaku dasar program tidak boleh berubah.
Namun, perangkat lunak yang ditulis dengan buruk dapat mengandalkan perilaku khusus implementasi, atau bahkan perilaku yang tidak terdefinisi. Ini dapat membuat asumsi tentang tipe bawaan, atau tentang endianness platform. Bahkan perangkat lunak yang ditulis dengan baik mungkin tidak memiliki pilihan selain mengandalkan ekstensi non-standar yang tidak tersedia pada rantai alat yang Anda pilih, atau mungkin melakukannya karena tidak perlu menghabiskan waktu untuk menambahkan lapisan portabilitas dalam durasi proyek asli.
Pada akhirnya, Anda harus bertanya kepada pembuat / vendor untuk apa kode sumber ditulis. Jika mereka mengklaim bahwa itu secara khusus menentang, katakanlah, Visual Studio 2015, dan memerlukan fitur Windows API, Anda mungkin harus tetap menggunakannya. Tetapi jika mereka mengklaim itu portabel, standar C ++, maka gunakan kompiler apa pun yang Anda suka. Pastikan perjanjian pembelian Anda menyertakan pengaturan dukungan sehingga Anda bisa mendapatkan bantuan gratis saat ternyata vendor berbohong.
Apakah kita perlu menggunakan versi C ++ yang sama dengan kode yang dibeli? Jika tidak menggunakan 2014, kami mungkin ingin menggunakan beberapa fitur itu, tetapi tidak jika mungkin ada beberapa masalah dengan pencampuran versi yang berbeda.
Mungkin. Mungkin.
C ++ 03 kompatibel ke depan untuk sebagian besar, jadi, jika kodenya C ++ 03, maka Anda tidak akan mengalami masalah. (Meskipun beberapa tweak mungkin diperlukan.)
Tetapi fitur-fitur yang diperkenalkan dalam C ++ 11 dan C ++ 14 tidak kompatibel-mundur jadi jika vendor menggunakan, katakanlah, C ++ 11 lambdas, dan Anda mencoba untuk membangun kode mereka dalam kompiler C ++ 03, yang baru saja memenangkan bekerja.
Secara teori, tentu saja, seharusnya tidak menjadi masalah, terutama versi bahasa, tetapi dapat dibayangkan bahwa versi berbeda dari kompiler akan menghasilkan kode objek yang berbeda, yang berpotensi mengarah pada perbedaan waktu, dll.
Benar. Jika kode sangat bergantung pada implementasi spesifik untuk mendapatkan hasil yang diharapkan, maka tergantung pada vendor untuk bertanggung jawab dan memberi tahu Anda mengenai hal itu. Karena kita hidup di dunia nyata, saya sarankan untuk rajin dan bertanya kepada mereka terlebih dahulu.
Dan saya akan menggemakan apa yang dikatakan orang lain: memastikan bahwa Anda memiliki semacam dukungan bantuan, sehingga jika mereka salah mengartikan salah satu dari respons terhadap pertanyaan-pertanyaan ini (baik sengaja atau tidak), Anda tidak akhirnya memikul biaya yang dihasilkan.