Visual C++: используем _CRT_SECURE_NO_WARNINGS для совместимости с классическими функциями
Часто жалуются на "неработающие" коды, особенно консольных приложений или CLR, особенно тех, что работали без каких-либо замечаний в версиях 2010-2013 и вдруг "не работают" в 2015, например, вот этот код.
Выдаются ошибки типа
Ошибка C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Можете, как и рекомендует компилятор,
заменить старые названия функций на их безопасные версии, скажем,
strcpy
на strcpy_s
и
fopen
на fopen_s
.
Правда, в последнем случае изменится и "классический" оператор открытия файла, скажем, с
FILE *out = fopen_s("data.txt", "wt");
на
FILE *out; fopen_s(&out,"data.txt", "wt");
Суть дела в том, что функции, возвращающие указатель, считаются небезопасными, отсюда и изменившийся шаблон метода открытия файла.
Есть путь ещё проще - напишите
#define _CRT_SECURE_NO_WARNINGS
в самом начале до всех #include
.
Если используется предкомпиляция, то можно определить этот макрос в заголовочном файле stdafx.h
.
Можно также попробовать "дорисовать" его не в заголовках, а в настройках проекта.
Управление предкомпилированными заголовками находится вот где: меню Проект - Свойства C/C++ - Препроцессор (Preprocessor) - Определения препроцессора (Preprocessor Definitions).
Проверено на пустом проекте C++ Visual Studio 2015, 2019, сработало.
Некоторым функциям директива "не поможет", например, stricmp
всё равно придётся заменять но _stricmp
, правда, без изменения списка аргументов.
Заметим, что по стандартам C++ функции
strcpy
,strcat
и другие не устарели, это собственная политика Microsoft.
13.10.2015, 11:48 [109507 просмотров]