Dipende da sistema operativo e compilatore.
Per distinguere tra piattaforme completamente diverse (Linux, Mac OS X, Windows), in genere ci si affida a delle #define fornite dal compilatore, che indicano la piattaforma su cui/per cui si sta compilando; poi si usano API o sistemi specifici del sistema operativo. Su Windows userai la GetVersionEx, sui sistemi POSIX (come Linux, Mac OS X, *BSD, ...) puoi usare la uname per ottenere informazioni sul kernel, mentre altre informazioni le ritrovi in maniere diverse a seconda del sistema operativo.