2

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

4

1 回答 1

2

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

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

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

于 2009-10-14T02:38:13.283 回答