我已經使用標誌設置編寫了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