Ciao a tutti, come da oggetto vorrei sapere se è possibile e quali istruzioni servono per determinare in fase di esecuzione su quale sistema operativo ci troviamo, grazie mille!
Ciao a tutti, come da oggetto vorrei sapere se è possibile e quali istruzioni servono per determinare in fase di esecuzione su quale sistema operativo ci troviamo, grazie mille!
E' assolutamente impossibile fare una cosa del genere in c: il c è un linguaggio compilato, quindi, ogni programma deve essere ricompilato per l's.o. specifico (es linux e windows)...
Se intendi su che windows ci troviamo allora prova in questo modo:
codice:OSVERSIONINFO winosinfo; winosinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); memset(winosinfo.szCSDVersion,'\0',128); GetVersionExA(&winosinfo); switch(winosinfo.dwMajorVersion) { case 4: switch(winosinfo.dwMinorVersion) { case 0: // Windows 95 break; case 10: // Windows 98 break; case 90: // Windows ME break; } break; case 5: switch(winosinfo.dwMinorVersion) { case 0: // Windows 2000 break; case 1: // Windows XP break; case 2: // Windows 2003 Server break; } break; case 6: if (!winosinfo.dwMinorVersion) // Windows Vista }
Experience is what you get when you don’t get what you want
Grazie mille, in effetti mi riferivo proprio alla possibilita di verificare non la versione dello stesso sitema ma invece se si tratta ad esempio di un sistema linux o microsoft... piu che altro per utilizzare quelle che sono le direttive di sistema corrette in un programma, banalmente ad esempio per pulire lo schermo vorrei poter richiamare la system("cls") se il porgramma viene eseguito su windows o la system("clear") su linux.... quindi forse l'unico modo e quello di utilizzare una try-catch per ottenere lo stesso risultato su sistemi diversi senza dover modificare il codice e ricompilare tutto...o sbaglio?
Spesso i compilatori definiscono macro differenti a seconda del sistema operativo su cui stanno compilando... ad esempio, VC++ definisce la macro _WIN32. In tal caso potresti usare una cosa del genere:
.codice:#if defined _WIN32 //fa quello che deve fare se compilato su Windows #elif defined _LINUX //dico per dire //fa quello che deve fare se compilato su Linux #endif
Amaro C++, il gusto pieno dell'undefined behavior.