Newsgroup: it.comp.programmare
Titolo: Stabilire quale OS


MS Works:   (noun) An oxymoron
MS Outlook: (noun) A news reader with Striping RAID Support.

 Sto cercando un modo elegante per stabilire su quale OS si sta operando.
Assumendo che il tuo programma non sia scritto in Java, non puo'
funzionare su un certo sistema senza essere ricompilato per quel
sistema, a questo punto puoi "cablare" il sistema nei sorgenti.
Davide

davide...@davidebianchi.net
 wrote:

Su questo non v'era dubbio, dal momento che ho chiesto qualcosa di simile 
alla direttiva #define, che non è usata a run-time, ma alla compilazione.
Quello che sto sviluppando è un programma che deve girare su Linux, Windows 
e MacOSX. Devo fare il minimo di fatica, visto che mi è consentito di usare 
le librerie Qt. Mi serve però di compilare parti di codice in un sistema 
piuttosto che in un altro.


 #endif
perchè non ti vanno bene le #ifdef ?
Maurizio

 codice in un sistema piuttosto che in un altro.
a seconda della quantita` di codice dipendente dalla piattaforma hai due 
scelte:
1) se le parti OS-dipendenti sono limitate a qualche riga all'interno di 
funzioni piu` ampie di conviene di usare esattamente l'approccio da te 
descritto: #ifdef LINUX ...
Ovviamente devi anche ricordarti di definire la macro appropriata prima 
di compilare, ma questo si puo` fare facilmente con uno script.
2) se hai delle intere funzioni che cambiano a seconda del sistema forse 
e` meglio separarle complemtamente. Ti crei tre file "linux.c", "win.c", 
"macosx.c" nei quali metti le funzioni relative e poi quando compili ti 
limiti a linkare quello corretto tralasciando gli altri due.
ciao Anto
-- 
Antonio Cuni, 20 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 scelte:
Ciň che vorrei č proprio #ifdef, ma non ho trovato differenza tra win95, 98, 
Me, NT, 2000: l'unico define č WIN32, ma a me serve distinguere... vorrei 
sapere quali sono i define di questi sistemi e di MacOSX. #ifdef linux 
funziona naturalmente, ma gli altri?


 tra win95, 98, Me, NT, 2000:
Spetta al compilatore che stai utilizzando metterti a disposizione
delle definizioni diverse a seconda del sistema sotto cui sta
girando.  In ogni caso, a run-time puoi ottenere informazioni 
molto precise su qual e' la versione di Windows, quindi questa 
distinzione puoi farla a codice.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 MacOSX. #ifdef linux funziona naturalmente, ma gli altri?
se il tuo compilatore ti mette a disposizione delle macro apposta hai 
gia` risolto. Altrimenti la via piu` conveniente e` creartele da solo; 
ad esempio:
=== OS.h ===
#define LINUX
// #define WIN_95
// #define WIN_98
// #define MACOS_X
// ...
===========
Includi il file OS.h in tutti i sorgenti nel quale serve e quando devi 
compilare su una nuova piattaforma basta modificare il file OS.h.
Se invece ti interessa un modo per automatizzare anche questa procedura 
la cosa piu` semplice e` di crearti degli script di configurazione che 
creino il file OS.h nel modo piu` appropriato; qualcosa del genere:
=== compile-linux ===
#!/bin/bash
echo '#define LINUX' > OS.h
make
==================
e simili per gli altri OS.
