Microsoft _s函数,它们现在是C ++标准的一部分吗?

时间:2009-03-06 03:02:39

标签: c++ standards

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

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

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

感谢。

5 个答案:

答案 0 :(得分:12)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

最糟糕的情况是你最终使用了一些#ifdef来有条件地编译。

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

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