在Linux上,netinet/in.h"应定义以下宏,用于测试特殊的IPv6地址.这包括IN6_IS_ADDR_UNSPECIFIED
、IN6_IS_ADDR_LOOPBACK
、IN6_IS_ADDR_LINKLOCAL
、IN6_IS_ADDR_SITELOCAL
、IN6_IS_ADDR_V4MAPPED
、IN6_IS_ADDR_V4COMPAT
、IN6_IS_ADDR_MULTICAST
等宏.这些都非常有用.
我在Windows(包括但不限于Winsock和Winsock 2)文档中广泛搜索类似的内容,但没有找到任何类似的内容.
但后来,我意外地发现,Windows SDK的ws2ipdef.h
定义了一组functions个(not个宏),具有相同的名称和行为(example).我可以在许多Windows SDK版本中找到它,从最新的Windows 7到最早的Windows 7(我还找不到可以判断的较旧的Windows SDK版本),但只能直接判断头文件.作为复核,我特别查看了ws2ipdef.h
的文档,它和它的任何子页面都没有提到任何这些函数.
此外,用引号加"Windows"搜索这些函数名称绝对不会得到任何有用或权威的结果.
所以,这就引出了两个问题:
- 在缺乏文档的情况下使用这些函数安全吗?如果它们是宏,我会谨慎地将它们定义在
#ifndef
个代码块内,但它们是实际的函数,所以我不能这样做.我必须按原样使用它们,或者使用不同的名称重新实现它们,以防止重载错误. - 为什么他们不会被记录下来呢?它们显然很有帮助,旨在镜像同名的Linux宏.