Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Riconoscere l'OS in uso
Forum - C/C++ - Riconoscere l'OS in uso

Avatar
Paro (Ex-Member)
Newbie


Messaggi: 4
Iscritto: 14/07/2010

Segnala al moderatore
Postato alle 23:17
Giovedì, 19/08/2010
Salve a tutti, ragazzi!
Vorrei sottoporvi un problema che mi è ricapitato tra le mani l'altro giorno. Mentre scrivevo giù un po' di codice, facevo attenzione alla portabilità tra i diversi OS. Mi sono accorto, quindi, che le differenze a volte sono davvero banali. Prendo l'esempio del comando system("cls") su Windows, che su Linux deve essere cambiato in system("clear"). Se magari il codice è lungo, il lavoro di sostituzione diviene piuttosto laborioso. Certo, potrei utilizzare un comando #define per definire, appunto, un identificatore da utilizzare nel codice al posto del semplice comando. Così, se dovessi trasportare tutto su un altro OS, mi basterebbe cambiare la direttiva #define. Mi chiedevo, però, se esiste un metodo migliore o magari automatico per apportare queste piccole modifiche compile-time, senza dovermene preoccupare ogni volta.
Ho generalizzato il problema nel titolo come credevo fosse meglio per riassumerlo. Spero di essermi spiegato bene :-|
Grazie per le risposte :rofl:


Se uccidi un uomo sei un assassino...
...se ne uccidi dieci sei un mostro...
...se ne uccidi cento sei un eroe...
...se ne uccidi mille sei un conquistatore...
...se ne uccidi a migliaia sei un DIO...
[Light Yagami]
PM Quote
Avatar
delta (Normal User)
Pro


Messaggi: 96
Iscritto: 01/09/2009

Segnala al moderatore
Postato alle 23:33
Giovedì, 19/08/2010
Codice sorgente - presumibilmente C++

  1. #ifdef WIN32
  2. system("cls");
  3. #endif
  4. #ifdef WIN64
  5. system("cls");
  6. #endif
  7. #ifdef LINUX
  8. system("clear");
  9. #endif



oppure

Codice sorgente - presumibilmente C++

  1. #ifdef WIN32
  2. #PULIRE_TERMINALE "cls"
  3. #endif
  4. #ifdef
  5. #PULIRE_TERMINALE "clear"
  6. #endif
  7.  
  8. system(PULIRE_TERMINALE);


Ultima modifica effettuata da delta il 19/08/2010 alle 23:36


programmatore è chi, non sapendo come realizzare un'idea, studia e trova il modo di farla. E' un lamer chi, non sapendo come realizzare un'idea, copia il codice degli altri.

"http://deltatheprogrammer.blogspot.com

Life_Universe_Everything
PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 22:36
Venerdì, 20/08/2010
Delta sbagli!

Codice sorgente - presumibilmente C/C++

  1. #if WIN_32
  2.       system...
  3. #elif WIN_64
  4.       system...
  5. #else
  6.        system...



scusa se ti scrivo così ma sto sul tel


Yep, I came back :P
PM Quote
Avatar
Paro (Ex-Member)
Newbie


Messaggi: 4
Iscritto: 14/07/2010

Segnala al moderatore
Postato alle 12:10
Sabato, 21/08/2010
Le vostre risposte mi sembrano un po' confuse; innanzitutto, che costanti devo usare per #ifdef ? WIN32 oppure WIN_32 ? E su Linux? Inoltre utilizzare un metodo come il seguente mi pare poco efficiente, in quanto dovrei scrivere 9 righe di codice solo per un'operazione:
Codice sorgente - presumibilmente C++

  1. #ifdef WIN32
  2. system("cls");
  3. #endif
  4. #ifdef WIN64
  5. system("cls");
  6. #endif
  7. #ifdef LINUX
  8. system("clear");
  9. #endif


Anche mettere questo codice in una funzione da richiamare ogni volta mi pare assurdo. Avreste la buona volontà di spiegarmi un po' meglio come fare? :-|


Se uccidi un uomo sei un assassino...
...se ne uccidi dieci sei un mostro...
...se ne uccidi cento sei un eroe...
...se ne uccidi mille sei un conquistatore...
...se ne uccidi a migliaia sei un DIO...
[Light Yagami]
PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 11:11
Lunedì, 23/08/2010


Yep, I came back :P
PM Quote
Avatar
Paro (Ex-Member)
Newbie


Messaggi: 4
Iscritto: 14/07/2010

Segnala al moderatore
Postato alle 12:10
Lunedì, 23/08/2010
Ho provato questo su Linux e funziona:
Codice sorgente - presumibilmente C++

  1. #ifdef WIN32
  2. #define Pulisci "cls"
  3. #elif WIN64
  4. #define Pulisci "cls"
  5. #else
  6. #define Pulisci "clear"
  7. #endif


Ora come ora non posso provarlo su Windows in tempi brevi, ma credo sia ugualmente corretto. Grazie a tutti, a buon rendere :k:


Se uccidi un uomo sei un assassino...
...se ne uccidi dieci sei un mostro...
...se ne uccidi cento sei un eroe...
...se ne uccidi mille sei un conquistatore...
...se ne uccidi a migliaia sei un DIO...
[Light Yagami]
PM Quote