2012-07-30 60 views
0

我將代碼從Solaris移植到Windows Visual Studios。爲了使代碼兼容,我使用了#if defined(Win32)和#ifdef(OSTYPE_solaris)等語句。我發現Win32被定義在哪裏,但我找不到OSTYPE_solaris的定義。我想我可能找不到它的定義,因爲我正在Visual Studio上查找它,並且定義OSTYPE_solaris的標題在Visual Studios上不可用。我在這個假設中糾正了嗎?如果是這樣,有誰知道OSTYPE_solaris是在哪裏定義的?我搜索了一下,但我沒有找到這個問題的運氣。我也與OSTYPE_linux有同樣的難題。OSTYPE_solaris定義在哪裏

回答

0

我的猜測是它們是由編譯器本身定義的。如果Solaris使用gcc作爲編譯器,則可以檢查編譯器定義的變量,例如:

echo「」| gcc -E -dM -

但我認爲你不應該在大多數情況下通過平臺ifdef,最好是使用基於特徵的定義,如HAVE_SOCKET_H。但是,這需要在多平臺構建系統上進行更多的工作,只需提供這些定義即可,您可能不需要它們。

+0

我會研究#ifdef以外的其他選擇。我正在將Visual Studio功能添加到已經是多平臺的項目中,並且#ifdef一直是所有其他平臺的慣例,所以現在改變它可能不是一種選擇。 我在Visual Studios上工作得更多,所以一旦我在Unix編譯器中,我會嘗試使用您的建議來檢查OSTYPE! – 2012-07-31 15:53:02