_ITERATOR_DEBUG_LEVEL
A macro _ITERATOR_DEBUG_LEVEL
controla se iteradores verificados e o suporte depuração de iteradores estão habilitados. Essa macro substitui e combina a funcionalidade das macros antigas _SECURE_SCL
e _HAS_ITERATOR_DEBUGGING
.
Valores da macro
A tabela a seguir resume os possíveis valores da macro _ITERATOR_DEBUG_LEVEL
.
Modo de compilação | Valor da macro | Descrição |
---|---|---|
Depurar | ||
0 | Desabilita os iteradores verificados e desabilita a depuração do iterador. | |
1 | Habilita os iteradores verificados e desabilita a depuração do iterador. | |
2 (padrão) | Habilita a depuração do iterador, iteradores verificados não são relevantes. | |
Versão | ||
0 (Padrão) | Desabilita iteradores verificados. | |
1 | Habilita iteradores verificados, a depuração do iterador não é revelante. |
No modo de versão, o compilador gera um erro se você especificar _ITERATOR_DEBUG_LEVEL
como 2.
Comentários
A macro _ITERATOR_DEBUG_LEVEL
controla se os iteradores verificados estão habilitados e, no modo de Depuração, se o suporte para depuração de iteradores está habilitado. Se _ITERATOR_DEBUG_LEVEL
estiver definido como 1 ou 2, os iteradores verificados garantem que os limites de seu contêiner não serão substituídos. Se _ITERATOR_DEBUG_LEVEL
for 0, os iteradores não serão verificados. Quando _ITERATOR_DEBUG_LEVEL
é definido como 1, o uso de qualquer iterador não seguro gera um erro de runtime e o programa é finalizado. Quando _ITERATOR_DEBUG_LEVEL
é definido como 2, o iterador não seguro causa uma asserção e uma caixa de diálogo de erro de runtime que permite interromper o depurador.
Como a macro _ITERATOR_DEBUG_LEVEL
dá suporte a funcionalidades semelhantes das macros _SECURE_SCL
e _HAS_ITERATOR_DEBUGGING
, talvez você não saiba qual macro e valor de macro usar em uma determinada situação. Para evitar confusão, recomendamos que você use apenas a macro _ITERATOR_DEBUG_LEVEL
. Esta tabela descreve o valor da macro _ITERATOR_DEBUG_LEVEL
equivalente a ser usado para diversos valores de _SECURE_SCL
e _HAS_ITERATOR_DEBUGGING
no código existente.
_ITERATOR_DEBUG_LEVEL |
_SECURE_SCL |
_HAS_ITERATOR_DEBUGGING |
---|---|---|
0 (padrão da versão) | 0 (desabilitado) | 0 (desabilitado) |
1 | 1 (habilitado) | 0 (desabilitado) |
2 (padrão da depuração) | (não relevante) | 1 (habilitado no modo de depuração) |
Para obter informações sobre como desabilitar avisos sobre iteradores verificados, consulte _SCL_SECURE_NO_WARNINGS
.
Exemplo
Para especificar um valor para a macro _ITERATOR_DEBUG_LEVEL
, use uma opção do compilador /D
para defini-lo na linha de comando ou use #define
antes que os cabeçalhos da Biblioteca Padrão do C++ sejam incluídos nos arquivos de origem. Por exemplo, na linha de comando, para compilar sample.cpp no modo de depuração e usar o suporte para depuração de iteradores, você pode especificar a definição de macro _ITERATOR_DEBUG_LEVEL
:
cl /EHsc /Zi /MDd /D_ITERATOR_DEBUG_LEVEL=1 sample.cpp
Em um arquivo de origem, especifique a macro antes de qualquer cabeçalho de biblioteca padrão que defina iteradores.
// sample.cpp
#define _ITERATOR_DEBUG_LEVEL 1
#include <vector>
// ...
Confira também
Iteradores verificados
Suporte ao iterador de depuração
Bibliotecas seguras: Biblioteca Padrão C++