MSVC _open / _close / etc.

时间:2009-10-14 02:16:49

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

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

1 个答案:

答案 0 :(得分:2)

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

由于Windows不是Unix,很久以前可能已经有很多时候没有Unix风格的API。因此,可以编写客户端代码来定义开放和关闭等功能。为了保持与现有代码的兼容性,当添加Unix样式API时,可以添加前导下划线,因为具有前导下划线的标识符是为实现保留的。换句话说,现有代码不应该定义名为_open的函数。

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