Compilatore GCC vs CC
CC è il nome dato al comando del compilatore UNIX. Viene utilizzato come comando del compilatore predefinito per il sistema operativo ed è anche eseguibile con lo stesso comando. GCC, d’altra parte, è il sistema operativo del compilatore GNU. Nei sistemi che girano su GNU e Linux, è comune trovare che il CC sia un collegamento in modo che gli script possano usare il compilatore in modo intercambiabile e semplice. Ci sono varie differenze osservate per quanto riguarda l’utilizzo della raccolta di compilatori GNU e del compilatore CC. Queste differenze possono generalmente essere raggruppate in due gruppi principali. Uno di questi è più specifico mentre l’altro gruppo è più generico.
Differenze
La differenza principale tra i due si occupa di compilatori C e compilatori C++. I compilatori C++ accettano programmi C++ ma non compilano programmi in C arbitrariamente. Questo è generalmente vero, anche se è stato dimostrato che è possibile scrivere un codice in linguaggio C in un sottoinsieme che può essere compreso bene da C++ anche quando molti programmi C non sono programmi C++ validi. D’altra parte, i compilatori C accettano programmi C ma rifiutano la maggior parte dei programmi C++ che vengono eseguiti in essi. Il motivo per cui questo problema sorge è che la maggior parte dei programmi C++ esegue costrutti che non sono disponibili in C.
Le librerie disponibili per questi linguaggi di programmazione dipendono in gran parte dalla lingua. I programmi C++ possono essere eseguiti su librerie C, ma questo è specifico della piattaforma. I programmi C d’altra parte non possono usare le librerie C++; quindi C++ tende ad avere un set di librerie più grande disponibile di C.
Su Solaris, il codice oggetto prodotto dal comando del compilatore non è in alcun modo compatibile con il codice prodotto dal g++ poiché si tratta di due compilatori separati e le loro convenzioni saranno diverse. I principali punti diversi sono la gestione delle eccezioni e la modifica dei nomi. È tuttavia importante notare che il mangling dei nomi è importante per impedire che gli oggetti compatibili vengano collegati tra loro. Questo in effetti indica il fatto che l’uso di una libreria compilata in CC richiede che l’intero programma sia compilato in CC. Inoltre, se è necessario utilizzare una libreria compilata con CC e un’altra con g++, è necessario eseguire una ricompilazione delle librerie per garantire la funzionalità desiderata.
In qualità di assembler che viene generato, GCC, che è la raccolta di compilatori GNU, è estremamente bravo in questo compito. I compilatori nativi funzionano comunque meglio a volte. Si può dire che i compilatori Intel abbiano ottimizzazioni approfondite che devono ancora essere replicate in GCC.
Entrambi i compilatori sono tutti nuovi agli standard attuali, anche se ci sono piccole differenze tra il linguaggio standard e il linguaggio supportato dal compilatore. Questi standard sono (C++98, C++2003, C99). Il vecchio supporto C89 è disponibile in entrambi i compilatori e una comprensione delle risposte attese è fondamentale per garantire che il compilatore si estenda come previsto. Tutto sommato GCC sembra essere focalizzata a rendere la vita più facile a causa di estensioni e modifiche che possono essere fatte ad esso per ottenere il risultato desiderato.
Riepilogo
C’è un problema con la compatibilità incrociata delle librerie di compilatori C e C++.
I programmi C++ possono essere eseguiti su librerie C ma questo è specifico della piattaforma.
Per utilizzare una libreria composta in CC è necessario che l’intero programma sia compilato con CC e non con GCC.
Se si dispone di una libreria compilata in CC e g++, una delle librerie deve essere ricompilata.
GCC fa un lavoro meraviglioso nella creazione di assembly di qualità.
Sia CC che GCC nelle funzionalità linguistiche sono ottimi in relazione agli standard attuali.