我有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/

10-12 17:08
查看更多