我目前在由两个编译器编译的代码中使用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
这样的“新”令牌来代替它? - 有人已经为我做了这份工作,并做了一个很好的“可移植性标题”文件,我可以使用吗?
- 还有什么我应该知道的?