_ITERATOR_DEBUG_LEVEL
Макрос _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++