La nostra azienda acquisterà un codice sorgente grande e molto complesso per le comunicazioni via satellite. È codificato in C ++ e codificheremo le aggiunte ad esso, anche in C ++, collegando il nostro codice con il codice acquistato in un'unica unità eseguibile.
Suona bene!
È necessario utilizzare lo stesso compilatore e la stessa versione del compilatore utilizzati per sviluppare il codice acquistato?
Parlando in generale, no non è necessario. Lo scopo di C ++ è di agire come un'astrazione su questo tipo di cose, quindi un programma C ++ ben scritto si compila altrettanto bene sulla tua toolchain come ha fatto sull'autore originale, e il programma risultante avrà lo stesso risultato. Le prestazioni possono variare, perché compilatori diversi sono bravi in cose diverse, ma il comportamento fondamentale del programma non dovrebbe cambiare.
Tuttavia, i software scritti in modo errato possono fare affidamento su comportamenti specifici dell'implementazione o persino su comportamenti non definiti. Può fare ipotesi sui tipi integrati o sull'endianità della piattaforma. Anche un software ben scritto potrebbe non avere altra scelta che fare affidamento su estensioni non standard che non sono disponibili sulla toolchain prescelta, oppure potrebbe farlo perché non era semplicemente necessario dedicare tempo ad aggiungere un livello di portabilità entro la durata di il progetto originale.
Alla fine, dovrai chiedere all'autore / venditore per cosa è scritto il codice sorgente. Se affermano che è specificamente scritto, diciamo, Visual Studio 2015 e richiede funzionalità API di Windows, probabilmente dovresti attenersi a questo. Ma se affermano che è portatile, standard C ++, usa qualunque compilatore ti piaccia. Assicurati che il contratto di acquisto includa un accordo di supporto in modo da poter ottenere assistenza gratuita quando si scopre che il fornitore mentiva.
È necessario che utilizziamo la stessa versione di C ++ del codice acquistato? Se non utilizza 2014, potremmo voler utilizzare alcune funzionalità di esso, ma non se potrebbero esserci problemi con il mixaggio di versioni diverse.
Probabilmente. Può essere.
C ++ 03 è per la maggior parte compatibile in avanti, quindi, se il codice è C ++ 03, è improbabile che tu abbia un problema. (Anche se potrebbero essere necessarie alcune modifiche.)
Ma le funzionalità introdotte in C ++ 11 e C ++ 14 non sono compatibili con le versioni precedenti, quindi se il fornitore ha usato, diciamo, lambda C ++ 11 e si tenta di creare il proprio codice in un compilatore C ++ 03, che ha appena vinto non funziona.
In teoria, ovviamente, non dovrebbe importare, in particolare la versione del linguaggio, ma è concepibile che versioni diverse del compilatore generino codice oggetto diverso, potenzialmente portando a differenze di temporizzazione, ecc.
Assolutamente. Se il codice si basa così tanto su un'implementazione specifica per ottenere i risultati previsti, spetta al venditore essere responsabile e informarvi di ciò. Dal momento che viviamo nel mondo reale, raccomando di essere diligente e chiedere loro prima.
E farò eco a quello che gli altri hanno detto: assicurati di avere una sorta di ricorso al supporto, in modo che se rappresentassero in modo errato una delle risposte a queste domande (intenzionalmente o meno), non finiresti per sostenere il costo risultante.