Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente bannato
    Registrato dal
    Dec 2003
    Messaggi
    562

    C/C++ - programmazione multipiattaforma

    Da un po' di tempo mi interesso alla programmazione multipiattaforma per Win32 e Linux (non in Java o in .net/mono) e ho trovato questo

    www.html

    Come funziona la definizione delle variabili linux e win32?

    E' una cosa definita dal sistema operativo in maniera trasparente per il programmatore o bisogna prelevare una qualche variabile d'ambiente?
    Per le varie distribuzioni di Linux è sempre valido 'linux'? e per le varie versioni di windows?

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Qui: http://docenti.ing.unipi.it/~d4544/f...processore.pdf

    C'è una dispensa sul preprocessore del C++ e parla anche dell'utilizzo per pilotare programmi multipiattaforma.

    Ecco un esempio:

    #ifdef _SUNOS
    //code
    #elseif _LINUX
    //code
    #elseif _HPUX
    //code
    #elseif _WIN32
    //code
    #else
    #error OS non supportato
    #endif


    400 POSTS!!!
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Utente bannato
    Registrato dal
    Dec 2003
    Messaggi
    562
    Scusa ma su questo link parla dell'uso delle variabili per indirizzare il codice verso le istruzioni dedicate al SO.

    Quello che mi chiedo è se sia possibile da codice determinare il SO o se devo iniziare con un DEFINE linux se compilo in linux, DEFINE win32 se compilo in windows ecc..

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da web@web
    Scusa ma su questo link parla dell'uso delle variabili per indirizzare il codice verso le istruzioni dedicate al SO.

    Quello che mi chiedo è se sia possibile da codice determinare il SO o se devo iniziare con un DEFINE linux se compilo in linux, DEFINE win32 se compilo in windows ecc..
    tu non devi definire, controlli solo se è già definito:

    codice:
    #include <iostream.h>
    
    
    #ifdef _WIN32
      char* a = "WINDOWS\0";
    #elif linux
      char* a = "LINUX\0";
    #else
    #error OS non supportato
    #endif
    
      int main() {
    	  cout << a << endl;
    
    	  return 0;
      }
    Adesso ho provato su windows e infatti viene scritto WINDOWS, nel caso inverto:

    codice:
    #ifdef linux
      char* a = "WINDOWS\0";
    #elif _WIN32
      char* a = "LINUX\0";
    #else
    #error OS non supportato
    #endif
    Viene scritto linux.

    Se uso definizioni di OS che non ho:

    codice:
    #include <iostream.h>
    
    
    #ifdef _SUNOS
      char* a = "SunOS\0";
    #elif _MAC//sarà questo che indica mac... bhò :-)
      char* a = "Mac\0";
    #else
    #error OS non supportato
    #endif
    
      int main() {
    	  cout << a << endl;
    
    	  return 0;
      }
    A compile time viene lanciato un errore:

    "OS non supportato"

    Quindi _WIN32 viene riconosciuto, magari dopo provo a vedere se va in linux.

    Intendevi questo?

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5
    Utente bannato
    Registrato dal
    Dec 2003
    Messaggi
    562
    Scusa ma a volte mi riesce difficile farmi capire Porta pazienza

    Tu scrivi
    codice:
    #ifdef _WIN32
      char* a = "WINDOWS\0";
    #elif linux
      char* a = "LINUX\0";
    #else
    #error OS non supportato
    #endif
    Vuol dire che quando solo in linux (per esempio) la variabile 'linux' è già impostata? E viceversa se sono in windows è impostata la variabile 'WIN32'?
    Quello che volevo capire ioera proprio questo: si tratta di una sorta di automatismo, non devo gestire io del codice per individuare il SO.
    Ho capito giusto?

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    esatto, ho provato anche su linux adesso, il seguente codice:

    codice:
    #include <stdio.h>
    
    
    #ifdef _WIN32
      char* a = "WINDOWS\0";
    #else 
    #ifdef linux
      char* a = "LINUX\0";
    #else
    #error OS non supportato
    #endif
    #endif
    
      int main() {
    	  printf("%s\n", a);
    
    	  return 0;
      }
    SU windows stampa WINDOWS, su linux LINUX.

    Li dentro puoi pilotare la compilazione per includere gli header solo di win e solo di linux e poi astrarli con una nuova interfaccia che si adatta, ad esempio potresti fare un metodo con firma
    "connetti(host, porta)", e il corpo si adatta tramite le direttive usando i file h del sistema ospite.

    Un ultimo esempio che mi viene in mente è quello per pulire lo schermo:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    #ifdef _WIN32
     const char* pulisci = "cls";
    #else 
    #ifdef linux
     const char* pulisci = "clear";
    #else
    #error OS non supportato
    #endif
    #endif
    
      int main() {
    	 printf("Ciao");
    system(pulisci);
    	  return 0;
      }
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  7. #7
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    ah ovviamente, anche in linux se scrivo SUNOS e MAC gcc mi lancia l'errore durante la compilazione "os non supportato"
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.