为什么WSASetLastError会被设计出来?

如果你有 Win32 开发,尤其是网络部分的开发经历,则你可能会注意到这样一个事实:我们有一个 API 用来设置操作代码,它叫 SetLastError,然而,还有另一个看起来差不多的API WSASetLastError。这有点让人摸不着头脑:为什么要设计两个类似的API?

如果你坐下来好好思考一下人生,你可能已经知道答案了。

Winsock 在最初被开发出来的时候,是需要运行在 16 位和 32 位操作系统上面的。请注意经典的 Winsock 函数如何基于异步通知的窗口消息。在 16 位 Windows 的世界里,并没有 SetLastError 这个API。因此,Winsock 必须为 16 位实现提供自己的版本。所以,它添加了自己的前缀 WSA。

由于维持源代码兼容性很重要,因此也有32位版本。当然,如果你不知道这段 16 位版本的历史,回想起来,32 位版本看起来会有点愚蠢。

总结

当我们发布软件的时候,一旦代码正式和客户见面了,它就会像刻在石头上的画一样不能再改变了,我们唯一能做的,就是在原有的代码基础上创立新的代码,就这样一层叠一层,直到天际。
我们常说到的兼容性,不是请个客,吃个饭就有的,而是开发者日日夜夜垒出来的。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Why does the function WSASetLastError exist?》

为什么WSASetLastError会被设计出来?_第1张图片

你可能感兴趣的:(OldNewThing,软件开发,系统设计)