В вашем примере постоянное распространение , а не распространение диапазона значений , и это, безусловно, вызывает предупреждение в моей версии gcc (4.5.1), независимо от того, * 1005 или нет* включен.
В общем, Java и Fortran являются единственными языками, поддерживаемыми gcc, который (Java по умолчанию и Fortan, если вы явно запрашиваете его с помощью -fbounds-check
) будет генерировать код для проверки границ массива.
Однако, хотя C / C ++ не поддерживает ничего подобного, компилятор все равно предупредит вас во время компиляции, если он считает, что что-то не так.Для констант это довольно очевидно, для диапазонов переменных это несколько сложнее.
Предложение «позволяет компилятору удалять ненужные проверки диапазона» относится к случаям, когда, например, вы используете 8-битную переменную без знака дляиндексировать в массив, который содержит> 256 записей или 16-битное значение без знака, чтобы индексировать в массив из> 65536 элементов.Или, если вы перебираете массив в цикле, и (переменный) счетчик цикла ограничен значениями, которые можно доказать как константы времени компиляции, которые являются допустимыми индексами массива, поэтому счетчик никогда не сможетвыйти за границы массива.
В таких случаях компилятор не не предупредит вас и не сгенерирует никакого кода для целевых языков, где это поддерживается.