Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Макрос _ITERATOR_DEBUG_LEVEL управляет включением проверенных итераторов и поддержки отладки итераторов . Этот макрос заменяет и объединяет функциональные возможности более старых макросов _SECURE_SCL и _HAS_ITERATOR_DEBUGGING.
Значение макроса
В следующей таблице описаны возможные значения макроса _ITERATOR_DEBUG_LEVEL.
| Режим компиляции | Значение макроса | Description |
|---|---|---|
| Debug | ||
| 0 | Отключает проверенные итераторы и отключает отладку итераторов. | |
| 1 | Включает проверенные итераторы и отключает отладку итераторов. | |
| 2 (по умолчанию) | Включает отладку итераторов; проверенные итераторы не имеют значения. | |
| Выпуск | ||
| 0 (по умолчанию) | Отключает проверенные итераторы. | |
| 1 | Включает проверенные итераторы; отладка итераторов не имеет значения. |
В режиме релиза компилятор создает ошибку, если указать _ITERATOR_DEBUG_LEVEL как 2.
Замечания
Макрос _ITERATOR_DEBUG_LEVEL управляет включением проверенных итераторов и поддержки отладки итераторов . Если _ITERATOR_DEBUG_LEVEL определен как 1 или 2, проверенные итераторы гарантируют, что границы ваших контейнеров не будут перезаписаны. Если _ITERATOR_DEBUG_LEVEL равно 0, итераторы не проверяются. Если _ITERATOR_DEBUG_LEVEL определен как 1, любое небезопасное использование итераторов вызовет ошибку во время выполнения и программа будет завершена. Когда _ITERATOR_DEBUG_LEVEL определяется как 2, небезопасное использование итератора вызывает подтверждение и появление диалогового ошибки времени выполнения, позволяющее переключиться в режим отладчика.
Так как макрос _ITERATOR_DEBUG_LEVEL поддерживает функциональность, аналогичную макросам _SECURE_SCL и _HAS_ITERATOR_DEBUGGING, в конкретных ситуациях нелегко решить, какие макросы и значения макросов использовать. Чтобы избежать путаницы, рекомендуется использовать только макрос _ITERATOR_DEBUG_LEVEL. В следующей таблице описаны эквивалентные значения макроса _ITERATOR_DEBUG_LEVEL для их использования при различных значениях _SECURE_SCL и _HAS_ITERATOR_DEBUGGING в существующем коде.
_ITERATOR_DEBUG_LEVEL |
_SECURE_SCL |
_HAS_ITERATOR_DEBUGGING |
|---|---|---|
| 0 (значение по умолчанию для релиза) | 0 (отключено) | 0 (отключено) |
| 1 | 1 (включено) | 0 (отключено) |
| 2 (значение по умолчанию для отладки) | (неприменимо) | 1 (включено в режиме отладки) |
Сведения об отключении предупреждений о проверяемых итераторах см. в разделе _SCL_SECURE_NO_WARNINGS.
Пример
Чтобы указать значение макроса, используйте /D параметр компилятора, _ITERATOR_DEBUG_LEVEL чтобы определить его в командной строке или использовать #define до включения заголовков стандартной библиотеки C++ в исходные файлы. Например, при работе в командной строке для компиляции sample.cpp в режиме отладки и для использования поддержки отладки итераторов вы можете указать определение макроса_ITERATOR_DEBUG_LEVEL:
cl /EHsc /Zi /MDd /D_ITERATOR_DEBUG_LEVEL=1 sample.cpp
В исходном файле укажите макрос перед любыми заголовками стандартной библиотеки, определяющими итераторы.
// sample.cpp
#define _ITERATOR_DEBUG_LEVEL 1
#include <vector>
// ...
См. также
Checked Iterators
Поддержка итераторов отладки
Безопасные библиотеки: стандартная библиотека C++