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?