我正在调试模式下使用 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 扩展。