我有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);
...
}
答案 0 :(得分:1)
您可以使用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();