C++;-检查是否需要安全功能

C++;-检查是否需要安全功能,c,visual-c++,C,Visual C++,当我使用Visual Studio(MSVC)并使用strcat函数时,我会得到错误 错误C4996:“strcat”:此函数或变量可能不安全。考虑使用StrucTs代替。要禁用弃用,请使用_CRT\u SECURE\u NO\u警告。有关详细信息,请参阅联机帮助 如果我要做一个同样适用于GCC之类的编译器的项目,是否有办法检测是否需要这些safe函数,例如MSVC宏?通常我会使用\ifdef\u CRT\u unsecure\u DEPRECATE。Visual首先使用宏来添加这些警告,因此,

当我使用Visual Studio(MSVC)并使用
strcat
函数时,我会得到错误

错误C4996:“strcat”:此函数或变量可能不安全。考虑使用StrucTs代替。要禁用弃用,请使用_CRT\u SECURE\u NO\u警告。有关详细信息,请参阅联机帮助


如果我要做一个同样适用于
GCC
之类的编译器的项目,是否有办法检测是否需要这些
safe
函数,例如MSVC宏?

通常我会使用
\ifdef\u CRT\u unsecure\u DEPRECATE
。Visual首先使用宏来添加这些警告,因此,如果您在提供警告的Visual版本上编译,它将被定义。

您可以对跨平台代码使用条件编译。例如:

#ifdef WIN
strcat_s(...
#else
strcat(...
#endif

MSVC编译器检测被确认为已弃用的函数的此类调用,并在级别3上生成警告。因此,只需使用此级别(或更高级别)进行编译,并查看警告。

它们永远不需要。正如消息所说,您可以通过定义
\u CRT\u SECURE\u NO\u警告来使用strcat
。相反,您想知道诸如
strcat\s
之类的函数何时可用吗?我不知道您是否可以具体做到这一点,但您应该能够执行#定义#CRT\u安全(u CPP\u重载)标准名称1以启用重载。看见这将帮助您编写可移植到GCC的代码well@Dirk<代码> STRCAT/COD>是C和C++中的标准库函数。你怎么知道这个问题不是C++ C++???HVD问题不是关于C++而是关于C和C++的函数。我认为C是更好的标签。@我通常都很小心编辑这样的标签,因为如果有一个正确的和有用的答案,它不会让我吃惊,只有在C++中工作,而不是在C.使用<代码>α-语用警告(禁用:4996)< /C> >从链接中摆脱问题,非常感谢。是解决问题最糟糕的方法!它将屏蔽与CRT没有链接的其他弃用警告
#define"CRT"SECURE"NO"警告
(可能是通过项目设置中编译命令行上的/D)是避免弃用CRT函数和最大化可移植性的更好方法。