【问题标题】:MSVC _open/_close/etcMSVC _open/_close/等
【发布时间】:2009-10-14 02:16:49
【问题描述】:

为什么 API 的 _open、_close 和其他标准文件 i/o 函数都带有下划线前缀?这些不是一些标准的一部分吗?

【问题讨论】:

    标签: visual-studio file-io libc standard-library


    【解决方案1】:

    打开/关闭是某些 Unix 标准、POSIX、SUS 等的一部分,但 Windows 不是 Unix。 您会注意到像 fopen 这样的 ANSI C 标准库函数没有单下划线装饰。

    由于 Windows 不是 Unix,可能有一段时间,很久以前,Unix 风格的 API 不可用。因此,可以编写客户端代码来定义诸如打开和关闭之类的函数。为了保持与现有代码的兼容性,当添加 Unix 风格的 API 时,它们可以添加前导下划线,因为带有前导下划线的标识符是为实现保留的。换句话说,现有代码不应定义名为 _open 的函数。

    然后可以通过使用宏(或在链接器级别实现的别名)相对容易地编译针对 Unix 样式 api 的“可移植”代码,因为针对 unix 的代码知道它没有定义任何名为 open/ 的函数关闭等。

    【讨论】:

    • 定义 _CRT_NONSTDC_NO_DEPRECATE 全局公开除了前缀的通用名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 2016-03-02
    相关资源
    最近更新 更多