检测如果Windows操作系统在C + +

我如何检测操作系统是否是C ++ / C中的Windows?

谢谢

#ifdef _WIN32 cout << "This is Windows." << endl; #endif 

这将允许您只为Windows定义块。 只要预处理器宏被定义。

这是编译时的事情,而不是运行时的事情。

使用

 getenv("windir"); 

如果你得到NULL,那么它不是Windows。

由于%windir%只能在windows系统上定义,所以这是有效的。 这当然是一个廉价和肮脏的黑客攻击。

http://www.cplusplus.com/reference/clibrary/cstdlib/getenv/

你不应该这样做。 您应该分别编译每个平台,因此您应该已经知道该平台是否为任何给定的二进制文件的窗口。

基本上,在运行时检查操作系统是没有用的,所以这样做的可能性是一个有争议的问题。

为了帮助您回想未来C ++如何在不同的平台上进行编译,请记住“只编写一次,随时编译”。


我建议设置一个编译时间标志,导致编译的行为有所不同,具体取决于你是否编译windows。

如果是运行时,可能是指Wine(在非Windows操作系统上)。 如果没有,那显然是不可能的。 Windows二进制文件无法在其他操作系统中运行(除非它们具有Wine)。

如果是编译时,可能重复: 是否有任何宏来确定我的代码是否正在编译到Windows?

(见上面接受的答案)