【问题标题】:Detect if Windows operating system in C++ [duplicate]检测 C++ 中的 Windows 操作系统 [重复]
【发布时间】:2011-05-20 19:08:18
【问题描述】:

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

【问题讨论】:

  • 如何编译二进制兼容多种操作系统的代码?
  • 你问的是编译时间,还是运行时间?
  • 运行时,程序运行时
  • 您根本不必这样做,因为您必须构建在 Windows 上运行的代码,并且这与您为 Linux、Mac 或 FreeBSD 等构建的二进制文件不兼容. 阅读您的其他 cmets,您真正想要的是编译时确定专门为 Windows 构建代码。
  • 当您将程序编译为“本机代码”(特定于 CPU 的机器代码)时,您通常必须针对生成的可执行文件能够在其上运行的特定操作系统(通常是其版本) .这与解释型语言(如 Ruby 或 Java)不同,其中存在本地代码程序来读取源代码或其表示程序的表示(“字节码”)。尽管如此,你还是可以编译一个 Windows 程序并在 Windows 模拟器下运行它,比如 Linux 的 WINE,这是你想要能够识别的吗?

标签: c++ windows


【解决方案1】:
#ifdef _WIN32
cout << "This is Windows." << endl;
#endif

这将允许您仅为窗口定义块。只要定义了预处理器宏。

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

【讨论】:

  • 这适用于 Windows 64 位吗?我当然可以测试,但也许值得为未来的读者编辑答案。
【解决方案2】:

您可以像这样使用 cstdlib 中的getenv()

#include <cstdlib>

getenv("windir");

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

这是因为%windir% 只能在 Windows 系统上定义。这当然是一种廉价而肮脏的黑客行为。

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

【讨论】:

  • 我很确定这样做很糟糕。
  • 这是一个黑客。您还可以使用 getenv("OS") 并检查“Windows”和“Windows_NT”,但这需要一些内存处理。还有其他正式的方法,但这个函数应该是标准 C 库的一部分。
  • -1:我可以在linux上定义windir...
【解决方案3】:

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

如果是编译时,可能重复:Are there any macros to determine if my code is being compiled to Windows?

(见上面接受的答案)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多