Windows crt secure no warnings

Содержание
  1. Windows crt secure no warnings
  2. Visual C++: используем _CRT_SECURE_NO_WARNINGS для совместимости с классическими функциями
  3. Как использовать _CRT_SECURE_NO_WARNINGS
  4. Решение
  5. Другие решения
  6. Удалите безопасные предупреждения (_CRT_SECURE_NO_WARNINGS) из проектов по умолчанию в Visual Studio
  7. Решение
  8. Другие решения
  9. Security Features in the CRT
  10. Eliminating deprecation warnings
  11. Additional Security Features
  12. Предупреждение компилятора (уровень 3) C4996 Compiler Warning (level 3) C4996
  13. Remarks Remarks
  14. Отключить предупреждение Turn off the warning
  15. Отключение предупреждения для определенной строки кода Turn off the warning for a specific line of code
  16. Отключение предупреждения в файле Turn off the warning within a file
  17. Отключение предупреждения в сборках из командной строки Turn off the warning in command-line builds
  18. Отключение предупреждения для проекта в Visual Studio Turn off the warning for a project in Visual Studio
  19. Отключение предупреждения с помощью макросов препроцессора Disable the warning using preprocessor macros
  20. Имена функций POSIX POSIX function names
  21. Небезопасные функции библиотеки CRT Unsafe CRT Library functions
  22. Ненадежные функции стандартной библиотеки Unsafe Standard Library functions
  23. Проверенные итераторы включены Checked iterators enabled
  24. Ненадежный код MFC или ATL Unsafe MFC or ATL code
  25. Устаревшие функции и переменные CRT Obsolete CRT functions and variables
  26. Ошибки маршалирования в коде CLR Marshaling errors in CLR code
  27. Пример: определяемая пользователем устаревшая функция Example: User-defined deprecated function

Windows crt secure no warnings

БлогNot. Visual C++: используем _CRT_SECURE_NO_WARNINGS для совместимости с классическими.

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 .

Правда, в последнем случае изменится и «классический» оператор открытия файла, скажем, с

Суть дела в том, что функции, возвращающие указатель, считаются небезопасными, отсюда и изменившийся шаблон метода открытия файла.

Есть путь ещё проще — напишите

в самом начале до всех #include .

Если используется предкомпиляция, то можно определить этот макрос в заголовочном файле stdafx.h .

Можно также попробовать «дорисовать» его не в заголовках, а в настройках проекта.

Управление предкомпилированными заголовками находится вот где: меню Проект — Свойства C/C++ — Препроцессор (Preprocessor) — Определения препроцессора (Preprocessor Definitions).

Проверено на пустом проекте C++ Visual Studio 2015, сработало.

13.10.2015, 11:48; рейтинг: 67444

Как использовать _CRT_SECURE_NO_WARNINGS

У меня есть ошибка компиляции в моем простом приложении окна MFC, сгенерированном из мастера с несколькими строками кода:

ошибка C4996: ‘strncpy’: эта функция или переменная может быть небезопасной. Попробуйте вместо этого использовать strncpy_s. Чтобы отключить устаревание, использовать _CRT_SECURE_NO_WARNINGS. Смотрите справку для деталей.

Я поставил Configuration Properties>>C/C++>>Preporocessor>>Preprocessor Definitions>> _CRT_NONSTDC_NO_WARNINGS

Но это не помогло. У меня есть еще один очень близкий проект, который генерирует только предупреждение в этом месте, и он не имеет _CRT_NONSTDC_NO_WARNINGS определение.

Единственная разница между проектами — это несколько разных вариантов в мастере.

Почему _CRT_NONSTDC_NO_WARNINGS не помогает в первом проекте и почему второй проект компилируется без проблем без этого определения?

Решение

Свойства конфигурации >> C / C ++ >> Препроцессор >> Препроцессор
Определения >> _CRT_SECURE_NO_WARNINGS

Другие решения

В разделе «Проект -> Свойства -> C / C ++ -> Препроцессор -> Определения препроцессора» добавьте _CRT_SECURE_NO_WARNINGS

Если вы находитесь в Visual Studio 2012 или более поздней версии, у этого есть дополнительный параметр «Проверки SDL» в разделе «Страницы свойств» -> C / C ++ -> Общие.

Рекомендуемые проверки дополнительного жизненного цикла разработки безопасности (SDL); включает в себя включение дополнительных функций генерации безопасного кода и дополнительные предупреждения, относящиеся к безопасности, в качестве ошибок.

По умолчанию используется значение YES. По какой-то причине, I.E вам следует использовать защищенную версию strncpy. Если вы измените это на NO, вы не получите ошибку при использовании небезопасной версии.

Удалите безопасные предупреждения (_CRT_SECURE_NO_WARNINGS) из проектов по умолчанию в Visual Studio

Есть ли способ установить по умолчанию для всех проектов удаление предупреждений прекомпилятора о безопасности, которые появляются при использовании таких функций, как scanf (). Я обнаружил, что вы можете сделать это, добавив строку в опцию проекта или #define _CRT_SECURE_NO_WARNINGS в начале кода.

Я постоянно создаю новые проекты для решения программных конкурсов, и это действительно раздражает (и занимает драгоценное время), чтобы добавить:

В начале кода, или установить его в настройках прекомпилятора каждый раз, когда я начинаю новый проект.

Решение

Отметьте все нужные проекты в обозревателе решений.

Нажмите Alt-F7 или щелкните правой кнопкой мыши в обозревателе решений и выберите «Свойства»

Конфигурации: все конфигурации

Нажми на
Строка Preprocessor Definitions для вызова его редактора

Скопируйте «_CRT_SECURE_NO_WARNINGS» в белое поле «Определения препроцессора» вверху.

Другие решения

Возможно, это потому, что я все еще новичок в VS и определенно новичок в C, но единственное, что позволило мне собрать, — это добавить

Вверху моего файла это подавило ошибку C4996, которую я получал с помощью sprintf.

Немного раздражает, но идеально подходит для моего крошечного кода и, безусловно, самый простой.

Не автоматически, нет. Вы можете создать шаблон проекта как BlueWandered предложенный или же создайте пользовательский список свойств, который вы можете использовать для своих текущих и всех будущих проектов.

  1. Откройте Менеджер свойств (View-> Property Manager)
  2. В диспетчере свойств щелкните правой кнопкой мыши свой проект и выберите «Добавить новый список свойств проекта».
  3. Дайте ему имя и создайте его в общем каталоге. Лист свойств будет добавлен ко всем целям сборки.
  4. Щелкните правой кнопкой мыши новый лист свойств и выберите «Свойства». Это откроет свойства и позволит вам изменить настройки так же, как если бы вы редактировали их для проекта.
  5. Зайдите в «Общие свойства-> C / C ++ -> Препроцессор»
  6. Отредактируйте настройку «Определения препроцессора» и добавьте _CRT_SECURE_NO_WARNINGS ,
  7. Сохранить и все готово.

Теперь каждый раз, когда вы создаете новый проект, добавьте этот список свойств примерно так …

  1. Откройте Менеджер свойств (View-> Property Manager)
  2. В диспетчере свойств щелкните правой кнопкой мыши свой проект и выберите «Добавить существующий список свойств проекта».

Преимущество в том, что вы получаете не только единое место для управления общими настройками, но и в любое время, когда вы изменяете настройки, они распространяются на ВСЕ проекты, которые его используют. Это удобно, если у вас много настроек, таких как _CRT_SECURE_NO_WARNINGS или библиотеки типа Boost, которые вы хотите использовать в своих проектах.

Все решения здесь не сработали на моем VS2013, однако я поставил #define _CRT_SECURE_NO_WARNINGS в stdafx.h как раз перед #pragma once и все предупреждения были подавлены. Примечание: я пишу код только для целей создания прототипов, чтобы поддержать мои исследования, поэтому, пожалуйста, убедитесь, что вы понимаете значение этого метода при написании своего кода.

Надеюсь это поможет

мои два цента за VS 2017:

Я могу подтвердить, что он работает в stdafx.h в обоих стилях:

(Я добавил другое определение для сетевых вызовов MSDN ..)
Конечно я предпочитаю а).

Я могу подтвердить, что:
#define _CRT_SECURE_NO_WARNINGS
(без значения) НЕ РАБОТА.

Читайте также:  Как восстановить блокнот windows 10 если удалил

PS реальная цель состоит в том, чтобы поместить эти определения ДО объявления функций, то есть до * .h

Если ваш проект не использует stdafx.h, вы можете поместить следующие строки в качестве первых строк в вашем файле .cpp, и предупреждение компилятора должно исчезнуть — по крайней мере, для меня это было в Visual Studio C ++ 2008.

Вполне нормально иметь комментарий и пустые строки перед ними.

Security Features in the CRT

Many old CRT functions have newer, more secure versions. If a secure function exists, the older, less secure version is marked as deprecated and the new version has the _s («secure») suffix.

In this context, «deprecated» means using the function’s isn’t recommended. It doesn’t mean the function is scheduled to be removed from the CRT.

The secure functions don’t prevent or correct security errors. Instead, they catch errors when they occur. They do additional checks for error conditions. If there is an error, they invoke an error handler (see Parameter Validation).

For example, the strcpy function can’t tell if the string it’s copying is too large for the destination buffer. Its secure counterpart, strcpy_s , takes the size of the buffer as a parameter. So it can determine if a buffer overrun will occur. If you use strcpy_s to copy 11 characters into a 10 character buffer, that is an error on your part; strcpy_s can’t correct your mistake. But it can detect your error and inform you by invoking the invalid parameter handler.

Eliminating deprecation warnings

There are several ways to eliminate deprecation warnings for the older, less secure functions. The simplest is simply to define _CRT_SECURE_NO_WARNINGS or use the warning pragma. Either will disable deprecation warnings, but the security issues that caused the warnings still exist. It’s better to leave deprecation warnings enabled and take advantage of the new CRT security features.

In C++, the easiest way to do that is to use Secure Template Overloads. This will eliminate deprecation warnings, in many cases, by replacing calls to deprecated functions with calls to secure versions of those functions. For example, consider this deprecated call to strcpy :

Defining _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES as 1 eliminates the warning by changing the strcpy call to strcpy_s , which prevents buffer overruns. For more information, see Secure Template Overloads.

For those deprecated functions without secure template overloads, you should definitely consider manually updating your code to use the secure versions.

Another source of deprecation warnings, unrelated to security, is the POSIX functions. Replace POSIX function names with their standard equivalents (for example, change access to _access), or disable POSIX-related deprecation warnings by defining _CRT_NONSTDC_NO_WARNINGS . For more information, see Compatibility.

Additional Security Features

Some of the security features include:

Parameter Validation . Secure functions, and many of their unsecure counterparts, validate parameters. Validation may include:

  • Checking for NULL values.
  • Checking enumerated values for validity.
  • Checking that integral values are in valid ranges.

A handler for invalid parameters is also accessible to the developer. When a function encounters an invalid parameter, instead of asserting and exiting the application, the CRT allows you to check these problems via _set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler.

Sized Buffers . You must pass the buffer size to any secure function that writes to a buffer. The secure versions validate that the buffer is large enough before writing to it. Which helps avoid dangerous buffer overrun errors that could allow malicious code to execute. These functions usually return an errno error code and invoke the invalid parameter handler if the size of the buffer is too small. Functions that read from input buffers, such as gets , have secure versions that require you to specify a maximum size.

Null termination . Some functions that left potentially non-terminated strings have secure versions, which ensure that strings are properly null-terminated.

Enhanced error reporting . The secure functions return error codes with more error information than was available with the pre-existing functions. The secure functions and many of the pre-existing functions now set errno and often return an errno code type as well, to provide better error reporting.

Filesystem security . Secure file I/O APIs support secure file access in the default case.

Windows security . Secure process APIs enforce security policies and allow ACLs to be specified.

Format string syntax checking . Invalid strings are detected, for example, using incorrect type field characters in printf format strings.

Предупреждение компилятора (уровень 3) C4996 Compiler Warning (level 3) C4996

В коде используется функция, член класса, переменная или typedef, помеченные как устаревшие. Your code uses a function, class member, variable, or typedef that’s marked deprecated. Символы являются устаревшими с помощью __declspec(deprecated) модификатора или атрибута c++ 14 [[deprecated]] . Symbols are deprecated by using a __declspec(deprecated) modifier, or the C++14 [[deprecated]] attribute. Фактическое предупреждающее сообщение C4996 указывается deprecated модификатором или атрибутом объявления. The actual C4996 warning message is specified by the deprecated modifier or attribute of the declaration.

Это предупреждение всегда является преднамеренным сообщением от автора файла заголовка, объявляющего символ. This warning is always a deliberate message from the author of the header file that declares the symbol. Не используйте нерекомендуемый символ, не зная последствий. Don’t use the deprecated symbol without understanding the consequences.

Remarks Remarks

Многие функции, функции элементов, функции шаблонов и глобальные переменные в библиотеках Visual Studio являются устаревшими. Many functions, member functions, template functions, and global variables in Visual Studio libraries are deprecated. Некоторые, такие как функции POSIX и Microsoft, являются устаревшими, так как теперь они имеют другое предпочтительное имя. Some, such as POSIX and Microsoft-specific functions, are deprecated because they now have a different preferred name. Некоторые функции библиотеки времени выполнения C являются устаревшими, так как они являются небезопасными и имеют более безопасный вариант. Some C runtime library functions are deprecated because they’re insecure and have a more secure variant. Другие являются устаревшими, так как они устарели. Others are deprecated because they’re obsolete. Сообщения об устаревании обычно содержат предлагаемую замену устаревшей функции или глобальной переменной. The deprecation messages usually include a suggested replacement for the deprecated function or global variable.

Отключить предупреждение Turn off the warning

Чтобы устранить проблему C4996, обычно рекомендуется изменить код. To fix a C4996 issue, we usually recommend you change your code. Вместо этого используйте предложенные функции и глобальные переменные. Use the suggested functions and global variables instead. Если необходимо использовать существующие функции или переменные по соображениям переносимости, можно отключить предупреждение. If you need to use the existing functions or variables for portability reasons, you can turn off the warning.

Отключение предупреждения для определенной строки кода Turn off the warning for a specific line of code

Чтобы отключить предупреждение для определенной строки кода, используйте warning директиву pragma, #pragma warning(suppress : 4996) . To turn off the warning for a specific line of code, use the warning pragma, #pragma warning(suppress : 4996) .

Отключение предупреждения в файле Turn off the warning within a file

Чтобы отключить предупреждение в файле для всех элементов, которые следуют за ним, используйте прагма-директиву warning, #pragma warning(disable : 4996) . To turn off the warning within a file for everything that follows, use the warning pragma, #pragma warning(disable : 4996) .

Читайте также:  Passcape reset windows password advanced edition iso

Отключение предупреждения в сборках из командной строки Turn off the warning in command-line builds

Чтобы отключить предупреждение глобально в сборках командной строки, используйте /wd4996 параметр командной строки. To turn off the warning globally in command-line builds, use the /wd4996 command-line option.

Отключение предупреждения для проекта в Visual Studio Turn off the warning for a project in Visual Studio

Чтобы отключить предупреждение для всего проекта в интегрированной среде разработки Visual Studio, сделайте следующее: To turn off the warning for an entire project in the Visual Studio IDE:

Откройте диалоговое окно страницы свойств для проекта. Open the Property Pages dialog for your project. Сведения об использовании диалогового окна страницы свойств см. в разделе страницы свойств. For information on how to use the Property Pages dialog, see Property Pages.

Выберите страницу свойств свойства конфигурации > C/C++ > Дополнительно . Select the Configuration Properties > C/C++ > Advanced property page.

Измените свойство Отключить определенные предупреждения , чтобы добавить 4996 . Edit the Disable Specific Warnings property to add 4996 . Нажмите кнопку ОК , чтобы применить изменения. Choose OK to apply your changes.

Отключение предупреждения с помощью макросов препроцессора Disable the warning using preprocessor macros

Вы также можете использовать макросы препроцессора, чтобы отключить некоторые определенные классы предупреждений об устаревании, используемых в библиотеках. You can also use preprocessor macros to turn off certain specific classes of deprecation warnings used in the libraries. Эти макросы описаны ниже. These macros are described below.

Чтобы определить макрос препроцессора в Visual Studio, выполните следующие действия. To define a preprocessor macro in Visual Studio:

Откройте диалоговое окно страницы свойств для проекта. Open the Property Pages dialog for your project. Сведения об использовании диалогового окна страницы свойств см. в разделе страницы свойств. For information on how to use the Property Pages dialog, see Property Pages.

Разверните Свойства конфигурации > препроцессора > C/C++. Expand Configuration Properties > C/C++ > Preprocessor.

В свойстве определения препроцессора добавьте имя макроса. In the Preprocessor Definitions property, add the macro name. Нажмите кнопку ОК для сохранения изменений, а затем выполните повторную сборку проекта. Choose OK to save, and then rebuild your project.

Чтобы определить макрос только в определенных исходных файлах, добавьте строку #define EXAMPLE_MACRO_NAME , например перед любой строкой, содержащей файл заголовка. To define a macro only in specific source files, add a line such as #define EXAMPLE_MACRO_NAME before any line that includes a header file.

Ниже приведены некоторые из распространенных источников предупреждений и ошибок C4996: Here are some of the common sources of C4996 warnings and errors:

Имена функций POSIX POSIX function names

The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: new-name. See online help for details. The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: new-name. See online help for details.

Корпорация Майкрософт переименовала некоторые библиотечные функции POSIX и Microsoft в CRT, чтобы они соответствовали ограничениям C99 и C++ 03 в зарезервированных и глобальных именах, определяемых реализацией. Microsoft renamed some POSIX and Microsoft-specific library functions in the CRT to conform with C99 and C++03 constraints on reserved and global implementation-defined names. Только имена являются устаревшими, а не сами функции. Only the names are deprecated, not the functions themselves. В большинстве случаев в имя функции добавляется символ подчеркивания для создания имени. In most cases, a leading underscore was added to the function name to create a conforming name. Компилятор выдает предупреждение об устаревании для имени исходной функции и предлагает предпочтительное имя. The compiler issues a deprecation warning for the original function name, and suggests the preferred name.

Чтобы устранить эту проблему, обычно рекомендуется изменить код так, чтобы вместо него использовались предлагаемые имена функций. To fix this issue, we usually recommend you change your code to use the suggested function names instead. Однако обновленные имена относятся только к Microsoft. However, the updated names are Microsoft-specific. Если необходимо использовать имена существующих функций по соображениям переносимости, можно отключить эти предупреждения. If you need to use the existing function names for portability reasons, you can turn off these warnings. Функции по-прежнему доступны в библиотеке с их исходными именами. The functions are still available in the library under their original names.

Чтобы отключить предупреждения об устаревании для этих функций, определите макрос препроцессора _CRT_NONSTDC_NO_WARNINGS . To turn off deprecation warnings for these functions, define the preprocessor macro _CRT_NONSTDC_NO_WARNINGS . Этот макрос можно определить в командной строке, включив параметр /D_CRT_NONSTDC_NO_WARNINGS . You can define this macro at the command line by including the option /D_CRT_NONSTDC_NO_WARNINGS .

Небезопасные функции библиотеки CRT Unsafe CRT Library functions

This function or variable may be unsafe. Consider using safe-version instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. This function or variable may be unsafe. Consider using safe-version instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

Корпорация Майкрософт не имеет устаревших функций и глобальных библиотек CRT и C++, так как доступны более безопасные версии. Microsoft deprecated some CRT and C++ Standard Library functions and globals because more secure versions are available. Большинство устаревших функций допускают непроверенный доступ на чтение или запись к буферам. Most of the deprecated functions allow unchecked read or write access to buffers. Их неправильное использование может привести к серьезным проблемам безопасности. Their misuse can lead to serious security issues. Компилятор выдает предупреждение об устаревании для этих функций и предлагает предпочтительную функцию. The compiler issues a deprecation warning for these functions, and suggests the preferred function.

Чтобы устранить эту проблему, рекомендуется вместо этого использовать функцию или переменную safe-version . To fix this issue, we recommend you use the function or variable safe-version instead. Иногда вы не можете обеспечить переносимость или обратную совместимость. Sometimes you can’t, for portability or backwards compatibility reasons. Тщательно проверьте, не возможно ли перезапись или Пересчитывание буфера в коде. Carefully verify it’s not possible for a buffer overwrite or overread to occur in your code. После этого предупреждение можно отключить. Then, you can turn off the warning.

Чтобы отключить предупреждения об устаревании для этих функций в CRT, определите _CRT_SECURE_NO_WARNINGS . To turn off deprecation warnings for these functions in the CRT, define _CRT_SECURE_NO_WARNINGS .

Чтобы отключить предупреждения о нерекомендуемых глобальных переменных, определите _CRT_SECURE_NO_WARNINGS_GLOBALS . To turn off warnings about deprecated global variables, define _CRT_SECURE_NO_WARNINGS_GLOBALS .

Дополнительные сведения об этих устаревших функциях и глобальных параметрах см. в разделе функции безопасности в библиотеках CRT и безопасные: Стандартная библиотека C++. For more information about these deprecated functions and globals, see Security Features in the CRT and Safe Libraries: C++ Standard Library.

Ненадежные функции стандартной библиотеки Unsafe Standard Library functions

‘std:: function_name ::_Unchecked_iterators::_Deprecate’ Call to std:: function_name with parameters that may be unsafe — this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ ‘Checked Iterators’ ‘std:: function_name ::_Unchecked_iterators::_Deprecate’ Call to std:: function_name with parameters that may be unsafe — this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ ‘Checked Iterators’

Читайте также:  Gpd win windows 10

В Visual Studio 2015 это предупреждение появляется в отладочных сборках, поскольку некоторые функции шаблона стандартной библиотеки C++ не проверяют правильность параметров. In Visual Studio 2015, this warning appears in debug builds because certain C++ Standard Library template functions don’t check parameters for correctness. Часто это обусловлено тем, что функции не хватает информации для проверки границ контейнера. Often it’s because not enough information is available to the function to check container bounds. Или, так как итераторы могут неправильно использоваться функцией. Or, because iterators may be used incorrectly with the function. Это предупреждение помогает понять эти функции, так как они могут быть источником серьезных брешей в системе безопасности в программе. This warning helps you identify these functions, because they may be a source of serious security holes in your program. Дополнительные сведения см. в разделе проверенные итераторы. For more information, see Checked iterators.

Например, это предупреждение отображается в режиме отладки std::copy , если вместо простого массива передается указатель на элемент. For example, this warning appears in Debug mode if you pass an element pointer to std::copy , instead of a plain array. Чтобы устранить эту проблему, используйте соответствующий объявленный массив, чтобы библиотека могла проверять экстенты массива и проверять границы. To fix this issue, use an appropriately declared array, so the library can check the array extents and do bounds checking.

Несколько стандартных алгоритмов библиотеки были обновлены в версии C++ 14 с двумя диапазонами. Several standard library algorithms were updated to have «dual range» versions in C++14. При использовании двух версий диапазона второй диапазон предоставляет необходимые проверки границ: If you use the dual range versions, the second range provides the necessary bounds checking:

В этом примере показано несколько способов использования стандартной библиотеки для проверки использования итератора, и если непроверенное использование может быть опасным: This example demonstrates several more ways the standard library may be used to check iterator usage, and when unchecked usage may be dangerous:

Если вы проверили, что в коде не может быть ошибки переполнения буфера, это предупреждение можно отключить. If you’ve verified that your code can’t have a buffer-overrun error, you can turn off this warning. Чтобы отключить предупреждения для этих функций, определите _SCL_SECURE_NO_WARNINGS . To turn off warnings for these functions, define _SCL_SECURE_NO_WARNINGS .

Проверенные итераторы включены Checked iterators enabled

Предупреждение C4996 также может возникать, если не используется проверяемый итератор, если _ITERATOR_DEBUG_LEVEL определен как 1 или 2. C4996 can also occur if you don’t use a checked iterator when _ITERATOR_DEBUG_LEVEL is defined as 1 or 2. По умолчанию для сборок в режиме отладки установлено значение 2, а для розничных сборок — 0. It’s set to 2 by default for debug mode builds, and to 0 for retail builds. Дополнительные сведения см. в разделе проверенные итераторы. For more information, see Checked iterators.

Ненадежный код MFC или ATL Unsafe MFC or ATL code

Предупреждение C4996 может возникать при использовании функций MFC или ATL, которые являются устаревшими по соображениям безопасности. C4996 can occur if you use MFC or ATL functions that were deprecated for security reasons.

Чтобы устранить эту проблему, настоятельно рекомендуется изменить код, чтобы вместо этого использовать обновленные функции. To fix this issue, we strongly recommend you change your code to use updated functions instead.

Сведения о подавлении этих предупреждений см. в разделе _AFX_SECURE_NO_WARNINGS . For information on how to suppress these warnings, see _AFX_SECURE_NO_WARNINGS .

Устаревшие функции и переменные CRT Obsolete CRT functions and variables

This function or variable has been superseded by newer library or operating system functionality. Consider using new_item instead. See online help for details. This function or variable has been superseded by newer library or operating system functionality. Consider using new_item instead. See online help for details.

Некоторые функции и глобальные переменные библиотеки устарели. Some library functions and global variables are deprecated as obsolete. Эти функции и переменные могут быть удалены в будущей версии библиотеки. These functions and variables may be removed in a future version of the library. Компилятор выдает предупреждение об устаревании для этих элементов и предлагает предпочтительную альтернативу. The compiler issues a deprecation warning for these items, and suggests the preferred alternative.

Чтобы устранить эту проблему, мы рекомендуем изменить код для использования предлагаемой функции или переменной. To fix this issue, we recommend you change your code to use the suggested function or variable.

Чтобы отключить предупреждения об устаревании для этих элементов, определите _CRT_OBSOLETE_NO_WARNINGS . To turn off deprecation warnings for these items, define _CRT_OBSOLETE_NO_WARNINGS . Дополнительные сведения см. в документации по устаревшей функции или переменной. For more information, see the documentation for the deprecated function or variable.

Ошибки маршалирования в коде CLR Marshaling errors in CLR code

Предупреждение C4996 также может возникать при использовании библиотеки маршалирования CLR. C4996 can also occur when you use the CLR marshaling library. В этом случае C4996 является ошибкой, а не предупреждением. In this case, C4996 is an error, not a warning. Эта ошибка возникает при использовании marshal_as для преобразования между двумя типами данных, для которых требуется marshal_context класс. The error occurs when you use marshal_as to convert between two data types that require a marshal_context Class. Эту ошибку также можно получить, когда библиотека упаковки не поддерживает преобразование. You can also receive this error when the marshaling library doesn’t support a conversion. Дополнительные сведения о библиотеке упаковки см. в разделе Общие сведения о маршалировании в C++. For more information about the marshaling library, see Overview of marshaling in C++.

Этот пример приводит к возникновению предупреждения C4996, поскольку библиотеке маршалирования требуется контекст для преобразования из в System::String const char * . This example generates C4996 because the marshaling library requires a context to convert from a System::String to a const char * .

Пример: определяемая пользователем устаревшая функция Example: User-defined deprecated function

Атрибут можно использовать deprecated в собственном коде для предупреждения вызывающих объектов, когда больше не рекомендуется использовать определенные функции. You can use the deprecated attribute in your own code to warn callers when you no longer recommend use of certain functions. В этом примере C4996 создается в двух местах: по одному для строки, для которой объявлена устаревшая функция, а другая — для строки, в которой используется функция. In this example, C4996 is generated in two places: One for the line the deprecated function is declared on, and one for the line where the function is used.

Оцените статью