C++ 微软的功能,它们是C&x2B的一部分吗+;现在是标准吗?

C++ 微软的功能,它们是C&x2B的一部分吗+;现在是标准吗?,c++,standards,C++,Standards,我最近刚从MSVC++6将我的IDE更改为MSVisualStudio2005,我收到了很多不推荐的警告。我没有忽视这个警告,而是开始将它们改为美国的等价物。然而,我后来发现这些只是微软的实现 我在某个地方读到他们正在推动这些成为标准的一部分。是吗 使用这些函数是个好主意吗?还是我应该用别的 谢谢。您升级了IDE,还升级了Microsoft库。坦率地说,您可以继续使用旧库,因为它们将继续保留(为了向后兼容),尽管Microsoft已经表示,它们实际上将开始删除一些旧函数。我想说,如果你正在向前发

我最近刚从MSVC++6将我的IDE更改为MSVisualStudio2005,我收到了很多不推荐的警告。我没有忽视这个警告,而是开始将它们改为美国的等价物。然而,我后来发现这些只是微软的实现

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

使用这些函数是个好主意吗?还是我应该用别的


谢谢。

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

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

最糟糕的情况是,您最终使用了一些
#ifdef
s进行有条件编译。

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

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


如果您想继续使用旧函数,可以通过定义宏
\u CRT\u SECURE\u NO\u warnings
(was
\u CRT\u SECURE\u NO\u DEPRECATE
,保持弃用警告的安静。据我所知,它们正在考虑标准化。这项建议是正确的

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


在对一个大型代码库进行了回顾之后,我发现要让所有程序员正确使用C标准库函数进行字符串操作几乎是不可能的,因此,所有旨在纠正这一点的内容都是一个受欢迎的补充。

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

是的。因为微软在OOXML标准崩溃中已经覆盖了自己,我确信ISO正在为把他们所有的东西纳入C++标准而陷入困境:-我不能确定这是否是讽刺。(更多的是幽默而不是讽刺。抱歉。我妻子会同意你的看法,我的幽默感有时很奇怪。@paxdiablo:可能有点晚了,但你确实意识到赫伯·萨特在微软工作?^^^只是为了支持,_-CRT_-SECURE_-NO_-DEPRECATE对strncpy等公司有效,而对fopen等公司则需要#pragma警告(禁用:4996)假设你可以定义“CRT\u SECURE\u NO\u”警告,但对我来说不起作用。那些
\u s
函数现在是C1X附录K的一部分。它们肯定是MS接口的改进,因此不符合要求。虽然改进不多,但有用性仍在讨论中。问题是MS做出了单方面将函数作为标准引入并“弃用”C的步骤在我看来,这似乎是另一种迫使你继续使用他们的工具的方式。这太令人怀疑了。他们在C标准库函数上做了一个小小的内部改进,并将其发布到公开发行版中,并提交标准化。如果这是为了增加放松他们的市场份额,为什么要尝试标准化呢?