2011-05-31 77 views
2

我已经使用标志设置编写了IPv6实现的代码。如果需要启用IPv6部分,则需要在编译过程之前在标头文件中设置标志。有没有与编译器本身一起提供的标志,以便我只需要使用语句#ifdef COMPILER_FLAG_FOR_IPV6来启用IPv6代码部分。如果没有,则编译IPv4部分。我不想在这里手动定义一个标志,而是使用IPV6的内置标志。编译器内是否有预编译IPV6的标志

+1

哪个操作系统?我无法说出Visual Studio的功能,但在Unix风格的操作系统上,编译器本身并不知道这种信息 - 这就是autoconf和朋友的用途。 – 2011-05-31 12:52:16

回答

2

IPv6兼容性不依赖于编译器支持,而是依赖于OS特定的头文件。没有标准的测试方法。 (正如你所指出的,你可能想要CMake/AutoConf /一些其他的构建系统来检测这个)。

您也可以达到你仿佛在寻找更直接,在Linux上,例如,你或许可以这样做:

#include <sys/socket.h> 
#ifdef AF_INET6 
.... 
#endif 

我不知道我愿意赌上如何便携/可靠这是虽然,我想它会适用于sys/socket.h的任何实施和通过winsock2.h快速浏览似乎也有类似也。

+0

@awoodland ...在这里,如果我使用我定义的宏如#define ENABLEIPv6 1那么代码工作正常。但是,如果我使用在sys/socket.h中定义的AF_INET6宏。即使在每个地方都包含这个头文件后,代码运行不正常。它陷入套接字编程的“连接”部分。我错过了什么吗?请建议是否有问题或需要采取其他措施。 – 2011-06-01 07:21:47

+0

我的猜测是你错过了一个'#include'的地方,这意味着'AF_INET6'将不会被定义,所以你可能会以奇怪的方式混合参数。 – Flexo 2011-06-01 07:34:15

+0

@awoodland ....我检查了所有的地方。那里包括#include 。现在,我不明白可能是什么原因。我不明白在连接功能卡住的原因。 – 2011-06-01 08:35:26