gpt4 book ai didi

c - 根据平台选择功能名称的最标准方法?

转载 作者:太空狗 更新时间:2023-10-29 15:02:59 28 4
gpt4 key购买 nike

我目前在由两个编译器编译的代码中使用 popen 函数:MS Visual Studio 和 gcc(在 linux 上)。我可能想稍后添加 gcc(在 MinGW 上)。​​

该函数在 gcc 中称为 popen,在 MSVS 中称为 _popen,因此我在源代码中添加了以下内容:

#ifdef _MSC_VER
#define popen _popen
#define pclose _pclose
#endif

这行得通,但我想了解是否存在此类问题的标准解决方案(我记得 stricmp/strcasecmp 的类似情况)。具体来说,我想了解以下内容:

  1. _MSC_VER 是要依赖的正确标志吗?我选择它是因为我觉得linux环境“更标准”。
  2. 如果我将这些#define 放在某个头文件中,那么我在stdio.h 之前还是之后#include 是否重要>(对于 popen 的情况)?
  3. 如果 _popen 本身定义为宏,我的 #define 是否有可能会失败?出于这个或其他原因,我是否应该使用像 my_popen 这样的"new" token ?
  4. 是否有人已经为我完成了这项工作并制作了一个我可以使用的良好“可移植性 header ”文件?
  5. 还有什么我应该注意的吗?

最佳答案

  1. 最好检查特定于 windows 的定义(也许是 _WIN32),因为 mingw 也没有。 popen() 是标准化的(它是 part of the Single UNIX® Specification v2 )
  2. 没有;只要宏在首次使用之前定义,那么 _popen() 直到稍后才定义都没有关系。
  3. 没有;即使 _popen 是一个宏,您所拥有的也很好。
  4. 已经做过很多次了,但我不知道您可以使用免费许可的版本。

关于c - 根据平台选择功能名称的最标准方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4844077/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com