【发布时间】:2009-10-14 02:16:49
【问题描述】:
为什么 API 的 _open、_close 和其他标准文件 i/o 函数都带有下划线前缀?这些不是一些标准的一部分吗?
【问题讨论】:
标签: visual-studio file-io libc standard-library
为什么 API 的 _open、_close 和其他标准文件 i/o 函数都带有下划线前缀?这些不是一些标准的一部分吗?
【问题讨论】:
标签: visual-studio file-io libc standard-library
打开/关闭是某些 Unix 标准、POSIX、SUS 等的一部分,但 Windows 不是 Unix。 您会注意到像 fopen 这样的 ANSI C 标准库函数没有单下划线装饰。
由于 Windows 不是 Unix,可能有一段时间,很久以前,Unix 风格的 API 不可用。因此,可以编写客户端代码来定义诸如打开和关闭之类的函数。为了保持与现有代码的兼容性,当添加 Unix 风格的 API 时,它们可以添加前导下划线,因为带有前导下划线的标识符是为实现保留的。换句话说,现有代码不应定义名为 _open 的函数。
然后可以通过使用宏(或在链接器级别实现的别名)相对容易地编译针对 Unix 样式 api 的“可移植”代码,因为针对 unix 的代码知道它没有定义任何名为 open/ 的函数关闭等。
【讨论】: