我有类文件的cpp和h。类实现包含 wcsncpy
函数,只有在定义 _CRT_SECURE_NO_WARNINGS
时才可以使用。如果我将 #define _CRT_SECURE_NO_WARNINGS
放在所有标题包含之前,它就会起作用。但为什么我不能将这一行放在 header 之后或事件之后,就在 wcsncpy
使用之前?
更新
根据我的理解,我可以在代码中执行#define
:
int _tmain(int argc, _TCHAR* argv[])
{
#define a
#ifdef a
std::wcout << _T("hello") << std::endl;
#endif
}
为什么下面的定义不起作用?
int main(void)
{
...
#define _CRT_SECURE_NO_WARNINGS
wcsncpy(dest, src, 4);
...
}
最佳答案
您可以使用 pragma warning 在本地抑制警告(默认情况下即使这个警告被视为错误) :
#pragma warning(push)
#pragma warning(disable: 4996) // 'wcsncpy': This function or variable may be unsafe.
wcsncpy(dest, src, 4);
#pragma warning(pop)
甚至可以使用 Microsoft 特定的 __pragma keyword 将其包装在更具可读性的宏中:
#define DISABLE_CRT_SECURE_WARNINGS() \
__pragma(warning(push)) \
__pragma(warning(disable: 4996))
#define RESTORE_CRT_SECURE_WARNINGS() \
__pragma(warning(pop))
...
DISABLE_CRT_SECURE_WARNINGS();
wcsncpy(dst, src, 4);
RESTORE_CRT_SECURE_WARNINGS();
关于c++ - 我可以在使用前定义吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48266139/