【问题标题】:In what conditions should I prefer io.h to windows.h?在什么情况下我应该更喜欢 io.h 而不是 windows.h?
【发布时间】:2013-12-01 19:51:47
【问题描述】:

我正在从事与 Windows 系统编程相关的项目。为此,我被指向windows.h。现在我遇到了io.h。它们之间究竟有什么区别?

例如,由于我正在移植一个已经部署在Linux上的应用程序,文件打开函数为open,而在Windows上,如果我使用windows.h,文件打开函数将为CreateFile,并且如果我使用io.h,它将是_open()。

【问题讨论】:

    标签: c++ windows system


    【解决方案1】:

    io.h 最初提供了对 Unix 中低级 I/O 原语和相关常量等的声明的访问。由于相当多的代码依赖于它,许多(大多数?)其他系统的编译器提供了同名的头文件,并且一些库函数(至少大部分)像 Unix 中的那样工作。

    Windows.h 是(某种意义上)Windows 的粗略模拟——一个头文件,可以访问(声明)Windows 的函数、常量等。最大的不同是,Windows.h 比io.h 所涵盖的基本的低级 I/O 做得更多,而是涵盖了所有的 GUI 功能等。

    所以:如果您想编写在类 Unix 系统上以相当低级别执行 I/O 的代码,并且还可以移植到其他系统(如 Windows),您可能想要使用io.h。如果你想专门为 Windows 做系统编程,你几乎肯定想使用windows.h。

    【讨论】:

      【解决方案2】:

      如果您尝试编写可移植代码,您可以使用stdio.h。

      Windows.h 包含创建 Windows 应用程序所需的所有头文件(所有基本的 Win32 API 头文件和预处理器指令)。如果您只是想读/写文件,并希望以可移植的方式这样做,那不是您会选择的头文件。

      【讨论】:

      • 问题标记为 C++。您可以使用<stdio.h>(或<cstdio>),但通常最好使用C++ 库。
      【解决方案3】:

      最终,Windows 上的所有这些不同的 I/O 函数都映射到对 Win32 API 的调用(例如,CreateFile 用于您的特定问题)。所以,如果你想直接使用这个 API,更喜欢 windows.h 。如果您想使用各种(兼容性)包装器,无论是标准 C++ 库、标准 IO 库、POSIX 子系统等...,那么您可以使用其他包含文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-01
        • 2022-01-08
        • 2017-01-01
        • 2011-05-10
        • 2017-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多