È una domanda piuttosto soggettiva: ci sono molte scuole di pratica per scrivere il codice C ++.
C ++ ti offre la possibilità di scegliere e scegliere i paradigmi che vuoi utilizzare per scrivere il tuo codice. Il linguaggio consente di utilizzare costrutti procedurali, orientati agli oggetti, generici e funzionali (in particolare con le funzionalità di C ++ 11).
Non è necessario necessariamente creare classi di utilità (diversamente da, ad esempio, in Java, dove tutto deve essere in una classe), poiché le funzioni statiche in una classe potrebbero non essere necessarie e possono essere solo funzioni libere indipendenti.
La compilazione condizionale è una necessità a causa di piattaforme disparate. Ho lavorato in difesa e ho scritto codice usando Qt, boost, librerie per videogiochi e ho lavorato su una varietà di piattaforme tra cui Linux, HP-UX, AIX, Windows, IRIX e Mac OSX - le piattaforme sono abbastanza diverse da quel codice scritto per uno non funziona necessariamente su una piattaforma diversa. Alcuni semplici esempi sono:
-
Endianess - Alcune architetture (come x86) sono little endian, ma molte altre architetture (come SPARC) sono big endian. La rete dipende anche dall'indirizzamento big endian. Quando scrivi codice tra diverse architetture, a volte devi compilare in modo condizionale un codice che supporti tali differenze endian.
-
Chiamate di libreria diverse - Windows utilizza winsock come API di rete ed è simile ai socket BSD utilizzati da Unix e dai derivati Unix. Tuttavia, è abbastanza diverso che le chiamate alle funzioni non sono simili. Inoltre, esistono chiamate di libreria che esistono in alcune versioni di Unix che non esistono in altri sapori o derivati, quindi è necessaria anche la compilazione condizionale per questo.
-
Differenze del compilatore o differenze di versione - Diverse versioni di compilatori o diversi compilatori possono supportare funzionalità / librerie che non sono supportate da altri compilatori.
Anche se usi una libreria come Qt, che mira ad essere multipiattaforma, c'è ancora una compilazione condizionale, come hai scoperto. Queste librerie multipiattaforma sono lì per ridurre le tue esigenze di compilazione condizionale.
Inoltre, gli stili e gli standard di codifica potrebbero influenzare la modalità di scrittura del codice.
-
link - Queste sono le convenzioni di codifica di Qt per sviluppatori e contributori alla libreria.
-
Convenzioni di codifica Boost - Le convenzioni della libreria Boost per i contributori.
-
Confronta con gli standard di codifica C ++ di Joint Strike Fighter - Non ho dovuto leggere questo, ma è molto diverso dalla maggior parte degli standard che ho dovuto seguire e molto severo per quanto riguarda le funzionalità di C ++ che non possono essere utilizzate e come strutturare il codice.
Solo altri aneddoti del mio passato: il C ++ può essere scritto in molti modi influenzato dagli standard interni. Ad esempio, alcune organizzazioni limitano l'uso della libreria standard C ++, in particolare per quanto riguarda l'utilizzo dei contenitori standard (come std::vector
e std::list
) - ciò potrebbe essere dovuto all'ambiente in questione (come i sistemi embedded).
In definitiva, si tratta di questo: ci sono molti modi per scrivere in C ++, ed è accettabile combinare paradigmi diversi in un singolo programma C ++ e codice base, perché ci possono essere modi migliori / più semplici per esprimere qualcosa in un paradigma piuttosto che essere bloccati nell'uso di un singolo modello per un'intera base di codice.
Se vuoi vedere basi di codice C ++ di grandi dimensioni con alta qualità del codice, dirò che Boost e Qt sono tra i migliori esempi.
Convenzioni e idiomi generalmente accettati e ampiamente accettati per la programmazione in C ++ sono contenuti in libri come Effective C ++ e Più efficace C ++