我目前在由两个编译器编译的代码中使用 popen
函数:MS Visual Studio 和 gcc(在 linux 上)。我可能想稍后添加 gcc(在 MinGW 上)。
该函数在 gcc 中称为 popen
,在 MSVS 中称为 _popen
,因此我在源代码中添加了以下内容:
#ifdef _MSC_VER
#define popen _popen
#define pclose _pclose
#endif
这行得通,但我想了解是否存在此类问题的标准解决方案(我记得 stricmp
/strcasecmp
的类似情况)。具体来说,我想了解以下内容:
_MSC_VER
是要依赖的正确标志吗?我选择它是因为我觉得linux环境“更标准”。- 如果我将这些
#define
放在某个头文件中,那么我在stdio.h
之前还是之后#include
是否重要>(对于popen
的情况)? - 如果
_popen
本身定义为宏,我的#define
是否有可能会失败?出于这个或其他原因,我是否应该使用像my_popen
这样的"new" token ? - 是否有人已经为我完成了这项工作并制作了一个我可以使用的良好“可移植性 header ”文件?
- 还有什么我应该注意的吗?
最佳答案
- 最好检查特定于 windows 的定义(也许是 _WIN32),因为 mingw 也没有。 popen() 是标准化的(它是 part of the Single UNIX® Specification v2 )
- 没有;只要宏在首次使用之前定义,那么 _popen() 直到稍后才定义都没有关系。
- 没有;即使 _popen 是一个宏,您所拥有的也很好。
- 已经做过很多次了,但我不知道您可以使用免费许可的版本。
关于c - 根据平台选择功能名称的最标准方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4844077/