Scrivere un pezzo significativo di codice in C o C++ non è una scelta leggera. Poiché nel tipico progetto software di oggi, la gente preferisce il time to market più importante rispetto alle prestazioni del codice. Di conseguenza, Javascript, Ruby, Java, Python, PHP dominano in popolarità rispetto a C o C++. Se state iniziando un progetto in C e C++, possiamo tranquillamente supporre che il vostro codice sia sensibile a caratteristiche di performance come i vincoli di memoria come i sistemi embedded, soft realtime, programmazione di sistema o app desktop.
Ognuno di questi domini porta i suoi vincoli specifici. Reagendo a questi vincoli, i progettisti di compilatori hanno anche dato priorità a certe caratteristiche del compilatore.
- GCC e clang sono ottimi compilatori a cui puntare, se si vuole la portabilità con una velocità abbastanza buona
- Intel e altri compilatori puntano alla velocità con relativamente meno enfasi sulla portabilità. Mentre gcc e clang possono sintonizzarsi su processori e varianti specifiche. Queste opzioni tendono ad essere disponibili prima su Intel
- I compilatori embedded mirano all'impronta di memoria e non si preoccupano troppo di velocità, portabilità o standard.
C e C++ lasciano molto terreno ai progettisti di compilatori e ambienti di sviluppo. Ciò si riflette nel modo in cui molte risposte menzionano l'ambiente di codifica come compilatori.
Quando si inizia un progetto in C o C++ bisogna considerare la seguente infrastruttura di supporto
- Ambiente di compilazione - C, C++ diventano rapidamente noiosi da compilare e distribuire. Ci sono vecchi strumenti di compilazione come Make e relativamente nuovi come Cmake, MSBuild, Bazel e gyp. Scegli bene. Ci sono diverse opzioni. Su Mac, Xcode è una buona opzione, Linux ha diverse opzioni e su Windows, MSVC è assolutamente stellare.
- Strumenti di debug - Come cacciatore di performance e correttezza del codice, il debug deve andare oltre le dichiarazioni di stampa. Alcuni sviluppatori esperti in C e C++ controllano il codice assembly per assicurarsi che il compilatore segua il comportamento atteso e sintonizzare il codice di conseguenza.
- Linter - I linters permettono di analizzare il codice per gli standard di codifica e i riferimenti. Alcuni linters vi diranno anche delle intestazioni inutilizzate
Con così tanti vincoli, questa domanda non può avere una risposta imparziale. Assicurarsi che il proprio codice segua uno standard specifico come c++11 o c++14 permette una relativa portabilità. Non è assolutamente una garanzia.
Seguite il C++ Reference per trovare la sintassi corretta e scegliere il giusto target. Guardando solo i compilatori gratuiti sulle principali piattaforme
- Per windows ci sono diversi strumenti di compilazione
- Scaricare il Visual C++ Build Tools (compilatore C++ standalone, librerie e strumenti)
- Minimalist GNU per Windows
- Clang - Guida introduttiva
- Mac OS X
- Xcode - Apple Developer
- gcc - Richiede Xcode e brew per essere installato
- Linux
- gcc - In bundle con Linux. Su ubuntu installa il pacchetto build-essential
- Clang - Installa clang e llvm
Per i non-free, il compilatore Intel e la libreria Math come formidabile per lo più per il benchmark delle prestazioni. Ciò non significa che i compilatori menzionati non producano codice buono e veloce.
PS: Nota speciale per la generazione danneggiata di sviluppatori C e C++ dall'India (incluso me). Le scuole e i college indiani insegnano Turbo C++ e non hanno alcuna volontà di cambiare. Turbo C++ è un prodotto fuori produzione senza alcun uso pratico. Gli sviluppatori che escono da queste istituzioni sono scioccati nello scoprire che le loro abilità in C e C++ sono completamente inutili. I nuovi costrutti e la sintassi, specialmente in Modern C++, permettono uno sviluppo di software molto più maturo e pratico. Turbo C++ era un compilatore a 16 bit per MS-DOS e varianti. Non esiste una versione a 32 bit o 64 bit di Turbo C++. L'ultimo rilascio di Turbo C++ per 4.0 fu nel 1993.