2011-05-31 65 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