我已经使用标志设置编写了IPv6实现的代码。如果需要启用IPv6部分,则需要在编译过程之前在标头文件中设置标志。有没有与编译器本身一起提供的标志,以便我只需要使用语句#ifdef COMPILER_FLAG_FOR_IPV6来启用IPv6代码部分。如果没有,则编译IPv4部分。我不想在这里手动定义一个标志,而是使用IPV6的内置标志。编译器内是否有预编译IPV6的标志
回答
IPv6兼容性不依赖于编译器支持,而是依赖于OS特定的头文件。没有标准的测试方法。 (正如你所指出的,你可能想要CMake/AutoConf /一些其他的构建系统来检测这个)。
您也可以达到你仿佛在寻找更直接,在Linux上,例如,你或许可以这样做:
#include <sys/socket.h>
#ifdef AF_INET6
....
#endif
我不知道我愿意赌上如何便携/可靠这是虽然,我想它会适用于sys/socket.h
的任何实施和通过winsock2.h
快速浏览似乎也有类似也。
@awoodland ...在这里,如果我使用我定义的宏如#define ENABLEIPv6 1那么代码工作正常。但是,如果我使用在sys/socket.h中定义的AF_INET6宏。即使在每个地方都包含这个头文件后,代码运行不正常。它陷入套接字编程的“连接”部分。我错过了什么吗?请建议是否有问题或需要采取其他措施。 – 2011-06-01 07:21:47
我的猜测是你错过了一个'#include'的地方,这意味着'AF_INET6'将不会被定义,所以你可能会以奇怪的方式混合参数。 – Flexo 2011-06-01 07:34:15
@awoodland ....我检查了所有的地方。那里包括#include
- 1. g ++等效的编译器标志到VC++编译器标志
- 2. 是否有编译iPad时设置的特定Xcode编译器标志?
- 3. 是否有内联网页编译器?
- 4. Objective-C编译器标志
- 5. 编译器标志在Eclipse
- 6. C++编译器标志11
- 7. GCC编译器标志“-DEVAL”
- 8. Cython OpenMP编译器标志
- 9. 编译器gcc编译器标志的文档?
- 10. 什么是“DNS_BLOCK_ASSERTIONS”(C编译器标志)?
- 11. CMake编译标志
- 12. 编译时标志
- 13. - 预编译标志应该做什么?
- 14. C#:是否有任何标准的编译标志,允许我检测是否编译为x86或x64?
- 15. 是否有预编译器定义,告诉我我正在编译iOS?
- 16. 仅编译/预编译global.asax
- 17. LESS预编译器
- 18. Protobuf预编译器
- 19. 如何使用CMake在编译时定义编译器标志?
- 20. Xcode 4.4 - 无法添加编译器标志来编译源
- 21. 如果编译器是MSVC,是否有预定义的定义?
- 22. 是否有devenv的标志在编译时禁用PDB一代?
- 23. f2py的附加编译器标志
- 24. 处罚的MSVS编译器标志/ bigobj
- 25. 检测使用预编译器宏编译了哪个目标
- 26. 是否有Groovy GPath编译器的XPath?
- 27. 是否可以使用GCC编译具有特定编译器标志的代码文件的一部分?
- 28. 适用于Linux的Xscale编译器? (也是Xscale编译标志问题)
- 29. 编译器如何编译编译器?
- 30. x86编译器是否有编码标准?
哪个操作系统?我无法说出Visual Studio的功能,但在Unix风格的操作系统上,编译器本身并不知道这种信息 - 这就是autoconf和朋友的用途。 – 2011-05-31 12:52:16