6

我最近将我的 IDE 更改为来自 MSVC++ 6 的 MS Visual Studio 2005,并且收到了很多弃用警告。我没有忽略警告,而是开始将它们更改为 _s 等效项。但是,我后来发现这些只是微软的实现。

我在某处读到他们正在推动这些成为标准的一部分。是吗?

使用这些 _s 函数是个好主意吗?还是我应该使用其他东西?

谢谢。

4

5 回答 5

12

这些*_s()函数不是 C 标准的一部分,但有一个待定的“技术报告”建议添加它们(我不确定 TR 中的例程是否与 Microsoft 的例程完全相同,或者它们是否只是相似) .

TR 24731-1:C 库扩展第一部分:边界检查接口:

如果您想继续使用旧功能,您可以通过定义宏来保持弃用警告安静_CRT_SECURE_NO_WARNINGS_CRT_SECURE_NO_DEPRECATE可能仍受支持)。

于 2009-03-06T03:12:40.337 回答
1

您升级了 IDE 并升级了 Microsoft 库。坦率地说,您可以继续使用您的旧库,因为它们会继续保留(为了向后兼容),尽管 Microsoft 已经表示他们实际上将开始删除其中一些旧功能。我想说,如果您正在向前发展,那么您可以使用更新的功能;如果您正在向后开发(或不担心版本是什么),那么您可能想要使用较旧的功能。

于 2009-03-06T03:08:12.343 回答
1

如果您的目标是 Microsoft 平台,请务必使用它们。即使您不是,您也可以在需要将软件移植到非 Microsoft 平台时(或如果)自己实现它们。

最坏的情况是你最终使用了几个#ifdefs 来有条件地编译。

于 2009-03-06T03:09:22.730 回答
1

据我所知,他们正在考虑进行标准化。该提案是TR 24731

至于使用它们是否是一个好主意,我会说是的。我不太喜欢他们捕获错误的方式,但我相信您可以为他们提供自己的处理程序。如果您需要跨平台兼容性,您有两种选择:在非 Windows 平台上使用宏实现它们或关闭弃用警告。

在对大型代码库进行审查后,我确定几乎不可能让所有程序员都正确使用 C 标准库函数进行字符串操作,因此所有旨在纠正这一点的内容都是值得欢迎的。

于 2009-03-06T03:16:16.787 回答
1

您应该使用标准函数并禁用 Microsoft 默认打开的任何虐待狂警告,以阻止您编写符合标准的代码。我严重怀疑“_s 函数”是否会被添加到标准 C 中(尽管它们已被提议),因为它们是单个供应商的发明,并且从未被任何其他供应商实现过。(嘿,让我们将所有 POSIX 合并到 C 标准中,而我们正在使用它......)

于 2010-08-14T07:17:32.310 回答