我已經使用標誌設置編寫了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. 是否有編譯iPad時設置的特定Xcode編譯器標誌?
- 2. Objective-C編譯器標誌
- 3. 什麼是「DNS_BLOCK_ASSERTIONS」(C編譯器標誌)?
- 4. C#:是否有任何標準的編譯標誌,允許我檢測是否編譯爲x86或x64?
- 5. 是否有預編譯器定義,告訴我我正在編譯iOS?
- 6. Xcode 4.4 - 無法添加編譯器標誌來編譯源
- 7. 如果編譯器是MSVC,是否有預定義的定義?
- 8. 是否有devenv的標誌在編譯時禁用PDB一代?
- 9. f2py的附加編譯器標誌
- 10. 處罰的MSVS編譯器標誌/ bigobj
- 11. 是否可以使用GCC編譯具有特定編譯器標誌的代碼文件的一部分?
- 12. Xcode:是否有位置/標誌來防止類編譯?
- 13. Groovy靜態編譯是否有全局標誌?
- 14. 是否有CLR版本的c#預編譯器定義
- 15. GCC編譯器標誌:-lg2c -lgfortran
- 16. C++ -malign-double編譯器標誌
- 17. CMake Fortran編譯器依賴標誌
- 18. 編譯器-march標誌基準?
- 19. __sync_bool_compare_and_swap編譯器標誌和包含
- 20. 使用-msse編譯器標誌
- 21. 如何設置該編譯器標誌?
- 22. 編譯器無法識別標誌
- 23. 用預編譯的靜態庫編譯
- 24. 是否有一個Java SWF編譯器?
- 25. 是否有Java到Flash編譯器?
- 26. 編譯器是否對Boost.Build有用?
- 27. 是否有Visual Basic 6反編譯器?
- 28. 是否可以恢復ASP.NET預編譯?
- 29. g ++:編譯時沒有-l標誌
- 30. 無論如何獲得編譯標誌文件中使用的編譯標誌?
哪個操作系統?我無法說出Visual Studio的功能,但在Unix風格的操作系統上,編譯器本身並不知道這種信息 - 這就是autoconf和朋友的用途。 – 2011-05-31 12:52:16