Compiler construction 在运行时确定操作系统?

Compiler construction 在运行时确定操作系统?,compiler-construction,operating-system,runtime,Compiler Construction,Operating System,Runtime,我在irc.quakenet.org cplusplus频道,一些开发人员开始讨论,并开始尝试和思考一种在运行时确定当前操作系统的方法。我们知道如何在编译时很容易地完成它,在运行时完成它是没有意义的,但我们只是想要一个挑战。到目前为止,我们还没有找到一种在运行时做到这一点的可靠方法。有人知道有什么解决方案/黑客/诡计/等可以实现这一点吗?它必须是编译时和运行时逻辑的组合 char *get_os_name (void); #ifdef _LINUX char *get_os_name

我在irc.quakenet.org cplusplus频道,一些开发人员开始讨论,并开始尝试和思考一种在运行时确定当前操作系统的方法。我们知道如何在编译时很容易地完成它,在运行时完成它是没有意义的,但我们只是想要一个挑战。到目前为止,我们还没有找到一种在运行时做到这一点的可靠方法。有人知道有什么解决方案/黑客/诡计/等可以实现这一点吗?

它必须是编译时和运行时逻辑的组合

char *get_os_name (void);

#ifdef _LINUX
    char *get_os_name (void)
    {
         static nm [1000];
         FILE *f = fopen ("/proc/version", "r");
         if (!f  &&  !fgets (nm, sizeof nm, f))
               return NULL;  /* could next try uname(), etc. */
         fclose (f);
         return nm;
    }
#endif

#ifdef _WIN32
    char *get_os_name (void)
    {
         OSVERSIONINFO   vi;

         memset (&vi, 0, sizeof vi);
         vi .dwOSVersionInfoSize = sizeof vi;
         GetVersionEx (&vi);
         switch (vi.dwPlatformId)
         {
         case VER_PLATFORM_WIN32_NT:  return "Win32";
         ...
         }
    }
#endif