我有cpp和h类文件。类实现包含wcsncpy
函数,仅在定义_CRT_SECURE_NO_WARNINGS
时才可以使用。如果将#define _CRT_SECURE_NO_WARNINGS
放在所有标头包含之前,它将起作用。但是,为什么我不能在wcsncpy
使用之前在标题或事件之后放置此行?
UPD
根据我的理解,我可以在代码中执行#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/