10 ответов:
Если вы не хотите загрязнять свой исходный код (после того, как все это предупреждение представлено только с компилятором Microsoft), добавьте
_CRT_SECURE_NO_WARNINGSсимвол для настройки вашего проекта через "проект"->"свойства"->"свойства конфигурации"->"C/C++"->"препроцессор" - >"определения препроцессора".Также вы можете определить его непосредственно перед включением файла заголовка, который генерирует это предупреждение. Вы должны добавить что-то вроде этого
#ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endifи просто небольшое замечание, убедитесь, что вы понимаете что означает это предупреждение, и, возможно, если вы не собираетесь использовать другие компиляторы, чем MSVC, рассмотрите возможность использования более безопасной версии функций, т. е. strcpy_s вместо strcpy.
вы можете временно отключить предупреждения в местах их появления с помощью
#pragma warning(push) #pragma warning(disable: warning-code) //4996 for _CRT_SECURE_NO_WARNINGS equivalent // deprecated code here #pragma warning(pop)таким образом, вы не отключаете все предупреждения, которые могут быть вредными в разы.
Я работаю над мультиплатформенным проектом, поэтому я не могу использовать функцию _s, и я не хочу загрязнять свой код конкретным кодом visual studio.
мое решение-отключить предупреждение 4996 в проекте visual studio. перейдите в проект - > свойства - > свойства конфигурации - > C/C++ - > дополнительно - > отключить конкретное предупреждение добавьте значение 4996.
если вы также используете библиотеку mfc и/или atl (не мой случай), определите перед включением mfc _AFX_SECURE_NO_DEPRECATE и перед включением atl _ATL_SECURE_NO_DEPRECATE.
я использую это решение в visual studio 2003 и 2005.p. s.Если вы используете только visual studio, перегрузки безопасного шаблона могут быть хорошим решением.
вы также можете использовать Безопасные Перегрузки Шаблонов, Они помогут вам заменить незащищенные вызовы на безопасные в любом месте, где можно легко вывести размер буфера (статические массивы).
добавьте следующую строку:
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1затем исправьте оставшиеся предупреждения вручную, используя функции _s.
комбинация @[macbirdie] и @[Adrian Borchardt] ответ. Что оказывается очень полезным в производственной среде (не испортить ранее существующее предупреждение, особенно во время кросс-платформенной компиляции)
#if (_MSC_VER >= 1400) // Check MSC version #pragma warning(push) #pragma warning(disable: 4996) // Disable deprecation #endif //... // ... strcat(base, cat); // Sample depreciated code //... // ... #if (_MSC_VER >= 1400) // Check MSC version #pragma warning(pop) // Renable previous depreciations #endif
для предупреждения по случаю предупреждения, разумно восстановить его по умолчанию в какой-то момент, так как вы делаете это на индивидуальной основе.
#pragma warning(disable: 4996) /* Disable deprecation */ // Code that causes it goes here #pragma warning(default: 4996) /* Restore default */
лучший способ сделать это-просто проверить и оценить. Я обычно делаю что-то вроде этого:
#ifndef _DEPRECATION_DISABLE /* One time only */ #define _DEPRECATION_DISABLE /* Disable deprecation true */ #if (_MSC_VER >= 1400) /* Check version */ #pragma warning(disable: 4996) /* Disable deprecation */ #endif /* #if defined(NMEA_WIN) && (_MSC_VER >= 1400) */ #endif /* #ifndef _DEPRECATION_DISABLE */все, что действительно требуется следующее:
#pragma warning(disable: 4996)еще не подвел меня; Надеюсь, это поможет
вы можете отключить проверку безопасности. перейти к
проект - > свойства - > свойства конфигурации - > C / C++ - > генерация кода - > проверка безопасности
и выберите Отключить проверку безопасности (/GS-)
вы можете определить символ _CRT_SECURE_NO_WARNINGS, чтобы подавить их и отменить его, чтобы восстановить их обратно.
еще один поздний ответ... Вот как Microsoft использует его в своих
wchar.h. Обратите внимание, что они также отключают Предупреждение C6386:__inline _CRT_INSECURE_DEPRECATE_MEMORY(wmemcpy_s) wchar_t * __CRTDECL wmemcpy(_Out_opt_cap_(_N) wchar_t *_S1, _In_opt_count_(_N) const wchar_t *_S2, _In_ size_t _N) { #pragma warning( push ) #pragma warning( disable : 4996 6386 ) return (wchar_t *)memcpy(_S1, _S2, _N*sizeof(wchar_t)); #pragma warning( pop ) }
Comments