_ITERATOR_DEBUG_LEVEL
La macro _ITERATOR_DEBUG_LEVEL
controla si están habilitados los iteradores comprobados y la compatibilidad de los iteradores de depuración. Esta macro reemplaza y combina la funcionalidad de las macros antiguas _SECURE_SCL
y _HAS_ITERATOR_DEBUGGING
.
Valores de la macro
En la siguiente tabla se resumen los posibles valores de la macro _ITERATOR_DEBUG_LEVEL
.
Modo de compilación | Valor de la macro | Descripción |
---|---|---|
Depurar | ||
0 | Deshabilita los iteradores comprobados y deshabilita la depuración de iteradores. | |
1 | Habilita los iteradores comprobados y deshabilita la depuración de iteradores. | |
2 (predeterminado) | Habilita la depuración de iteradores. Los iteradores comprobados no son pertinentes. | |
Versión | ||
0 (Predeterminado) | Deshabilita los iteradores comprobados. | |
1 | Habilita los iteradores comprobados. La depuración de iteradores no es pertinente. |
En modo de versión, el compilador genera un error si especifica _ITERATOR_DEBUG_LEVEL
como 2.
Comentarios
La macro _ITERATOR_DEBUG_LEVEL
controla si los iteradores comprobados están habilitados y, en modo de depuración, si la compatibilidad de los iteradores de depuración está habilitada. Si _ITERATOR_DEBUG_LEVEL
está definido como 1 o 2, los iteradores comprobados garantizan que los límites de los contenedores no se han sobrescrito. Si _ITERATOR_DEBUG_LEVEL
es 0, no se comprueban los iteradores. Cuando _ITERATOR_DEBUG_LEVEL
está definido como 1, el uso no seguro de iteradores produce un error en tiempo de ejecución y el programa finaliza. Cuando _ITERATOR_DEBUG_LEVEL
está definido como 2, el uso no seguro de iteradores produce una aserción y aparece un cuadro de diálogo de error en tiempo de ejecución que le permite interrumpir el depurador.
Dado que la macro _ITERATOR_DEBUG_LEVEL
admite una funcionalidad similar a las macros _SECURE_SCL
y _HAS_ITERATOR_DEBUGGING
, es posible que no sepa qué macro y qué valor de macro usar en una situación determinada. Para evitar confusiones, se recomienda que use solo la macro _ITERATOR_DEBUG_LEVEL
. En esta tabla se describe el valor de macro _ITERATOR_DEBUG_LEVEL
equivalente que se usará para distintos valores de _SECURE_SCL
y _HAS_ITERATOR_DEBUGGING
en el código existente.
_ITERATOR_DEBUG_LEVEL |
_SECURE_SCL |
_HAS_ITERATOR_DEBUGGING |
---|---|---|
0 (valor predeterminado de versión) | 0 (Deshabilitado) | 0 (Deshabilitado) |
1 | 1 (habilitado) | 0 (Deshabilitado) |
2 (valor predeterminado de depuración) | (no pertinente) | 1 (habilitado en modo de depuración) |
Para obtener más información sobre cómo deshabilitar las advertencias sobre los iteradores comprobados, consulte _SCL_SECURE_NO_WARNINGS
.
Ejemplo
Para especificar un valor para la macro _ITERATOR_DEBUG_LEVEL
, use una opción del compilador /D
para definirlo en la línea de comandos, o bien use #define
antes de los encabezados de la Biblioteca Estándar de C++ incluidos en los archivos de código fuente. Por ejemplo, en la línea de comandos, para compilar sample.cpp en modo de depuración y usar la compatibilidad de los iteradores de depuración, puede especificar la definición de macro _ITERATOR_DEBUG_LEVEL
:
cl /EHsc /Zi /MDd /D_ITERATOR_DEBUG_LEVEL=1 sample.cpp
En un archivo de código fuente, especifique la macro antes de los encabezados de la biblioteca estándar que definen los iteradores.
// sample.cpp
#define _ITERATOR_DEBUG_LEVEL 1
#include <vector>
// ...
Consulte también
Checked Iterators
Compatibilidad de los iteradores de depuración
Bibliotecas seguras: Biblioteca estándar de C++