_ITERATOR_DEBUG_LEVEL
_ITERATOR_DEBUG_LEVEL
巨集可控制是否啟用已檢查的迭代器和偵錯迭代器支援。 此巨集取代及結合了舊版 _SECURE_SCL
和 _HAS_ITERATOR_DEBUGGING
巨集的功能。
巨集值
下表摘要說明 _ITERATOR_DEBUG_LEVEL
巨集的可能值。
編譯模式 | 巨集值 | 描述 |
---|---|---|
偵錯 | ||
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
巨集。 下表說明在現有的程式碼中,針對 _SECURE_SCL
和 _HAS_ITERATOR_DEBUGGING
的各種值,要使用的對等 _ITERATOR_DEBUG_LEVEL
巨集值。
_ITERATOR_DEBUG_LEVEL |
_SECURE_SCL |
_HAS_ITERATOR_DEBUGGING |
---|---|---|
0 (發行模式預設) | 0 (已停用) | 0 (已停用) |
1 | 1 (已啟用) | 0 (已停用) |
2 (偵錯模式預設) | (不相關) | 1 (在偵錯模式下啟用) |
如需如何停用有關已檢查反覆運算器之警告的資訊,請參閱 _SCL_SECURE_NO_WARNINGS
。
範例
若要指定巨集的值 _ITERATOR_DEBUG_LEVEL
,請使用 /D
編譯程式選項在命令行上定義它,或在來源檔案中包含C++標準連結庫標頭之前使用 #define
。 例如,在命令列上,若要以偵錯模式編譯 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>
// ...