Поделиться через


_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++