4

我正在调试模式下使用 MSVC(VS 2013)编译一个跨平台的 C 库(在 Linux 上运行良好,并且曾经在 Windows 上运行)。当我read从 C 标准库调用时,有时会出现异常:

将无效参数传递给认为无效参数致命的函数。

我相信参数(文件描述符、缓冲区、长度)是可以的。即使文件描述符无效,我也希望它返回-1。代码(不是我自己的,它是跨平台的,在 Linux 上运行良好)实际上检查返回值是否为 -1 并采取相应措施。

MSDN 非常没有帮助,只是说:

此 POSIX 函数已弃用。请改用符合 ISO C++ 标准的 _ read

但是,我只是尝试并替换read_read,并且效果很好。

  • read和 和到底有什么区别_read?由于read没有记录,我不能只是查找它。它似乎做同样的事情,但也会引发异常。

  • 我可以混合使用“不推荐使用的 POSIX 函数”和“符合 ISO C++ 的”* 吗?例如“open”和“_read”?它似乎工作正常

  • 我可以#define read _read等等,并期望它像在 Linux 上一样工作吗?


*) 请注意,尽管文档中使用了语言,但该项目是纯 C,而不是 C++。MSVC 的奇怪之处在于它不是真正的 C 或 C++,而是某种意义上的 C/C++。此外,引发异常的事实并不意味着我正在使用 C++,但它是 C、IIRC 的非标准 Windows 扩展。

4

1 回答 1

1

我可以#define read _read等等,并期望它像在 Linux 上一样工作吗?

是的,只要这样做,它就会解决问题,而且你的代码将是跨平台的,只要记住还有其他功能有同样的问题。

于 2015-02-11T12:21:16.640 回答