2009-06-09 16 views
6

Quali risorse esistono per aiutare a scrivere codice C/C++ che funzioni su più piattaforme e compilatori? Per esempio, mi trovo regolarmente a fare domande come:Risorse per lo sviluppo C/C++ multipiattaforma

  • Quali macro di preprocessore vengono automaticamente definite in vari compilatori e ambienti? (Ad esempio __GCC__, WIN32, __WIN32__, __CYGWIN__)
  • Quali versioni di compilatori e librerie standard supportano relativamente nuove funzioni "standard" (ad esempio, i C99 lunghe doppie funzioni trigonometriche sinl(), cosl(), ...)
  • Quali funzioni sono disponibili su piattaforme diverse per eseguire compiti tipici, quando non sembra esistere una singola funzione portatile? (Ad esempio, ricevendo il tempo corrente con inferiori al secondo precisione)

Mi capita spesso di scrivere codice che dovrebbe compilare sotto Linux/GCC, Cygwin, mingw32, e Visual Studio, e ho spesso dovuto confrontarsi da più fonti (Linux man pages, MSDN, doc del compilatore) per ottenere le informazioni di cui ho bisogno. Questo deve essere un problema in cui gli sviluppatori si imbattono continuamente: ci sono risorse che compilano queste informazioni in un riferimento facilmente digeribile?

(Per questa domanda non sono particolarmente interessato a librerie cross-platform come wxWidgets o spinta. Sono più interessato a risorse o tecniche che avrebbero aiutato qualcuno scrivere la propria libreria multi-piattaforma o di un programma.)

MODIFICA: Questo è un esempio del tipo di pagina che sto cercando: http://predef.sourceforge.net/precomp.html. Una bella panoramica di vari compilatori/ambienti e dei macro del preprocessore che possono essere utilizzati per identificarli. Sarebbe bello trovare una risorsa simile che confrontava funzioni quasi equivalenti tra piattaforme (come gmtime_r() o ftime() in Linux vs _gmtime_s() o _ftime() in Windows) quando non esiste alcuna funzione comune.

+0

Come sta usando boost e wxWidgets non è una strategia per la scrittura di codice cross-platform compatibile? È come chiedere qualcosa che assomiglia all'uva ma non è tutto un "grapie". – Kieveli

risposta

1

Il modo fondamentale per scrivere codice multipiattaforma è scrivere codice che non dipenda da piattaforme specifiche. Ad esempio, quasi tutte le utility UNIX originali possono essere scritte senza riferimento a una piattaforma specifica. Scrivere codice che dipende da macro specifiche utilizzando la compilazione condizionale non è la migliore pratica.

+0

In linea di principio sono d'accordo, e lo faccio ogni volta che è possibile, ma ci sono molte circostanze in cui non esiste una funzione comune tra le piattaforme per alcuni compiti di basso livello. Ad esempio, se si desidera ottenere il tempo di sistema in millisecondi di precisione, è possibile utilizzare ftime() su Linux, ma su Windows si chiama _ftime().Come altro esempio, in una build Linux potresti voler impostare il percorso di configurazione predefinito su ~/.myprogram, mentre su Windows dovrebbe essere in% APPDATA% \ MyProgram. –

1

in realtà dipende il vostro progetto concreto, ma vorrei provare a

  • bastone per codice ISO conforme e POSIX, se possibile;
  • use -Wall ed elimina tutti gli avvisi;
  • controlla autoconf e autotoolset se possono essere d'aiuto.
Problemi correlati