我目前在由兩個編譯器編譯的代碼中使用popen
函數:MS Visual Studio和gcc(在Linux上)。我可能想在稍後添加gcc(在MinGW上)。根據平臺選擇函數名稱的最常用方法是什麼?
的函數被調用popen
的GCC,但_popen
爲MSVS,所以我增加了以下到我的源代碼:
#ifdef _MSC_VER
#define popen _popen
#define pclose _pclose
#endif
這工作,但我想了解是否存在一個標準的解決方案這樣的問題(我記得與stricmp
/strcasecmp
類似的情況)。具體來說,我想了解以下內容:
- 是
_MSC_VER
右邊的標誌取決於?我選擇它是因爲我的印象是linux環境是「更標準」。 - 如果我把這些
#define
放在某個頭文件中,我在#include
之前還是之後stdio.h
(對於popen
的情況)是否很重要? - 如果
_popen
被定義爲一個宏本身,有沒有機會我的#define
會失敗?我是否應該使用像my_popen
這樣的「新」令牌來代替它? - 有人已經爲我做了這份工作,並做了一個很好的「可移植性標題」文件,我可以使用嗎?
- 還有什麼我應該知道的?