Когда ковыряться в сети по вопросам, связанным с -Warray-bounds
в GCC, кажется, что проблемы с этим возникают, но иногда эти проблемы, как правило, кажется, привязан к очень специфическим сценариям кода. Функция, похоже, полагается на оптимизатор - вот почему вам нужна опция -O2
. (см. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35903#c9, где упоминается, что «причина, по которой это требует -O2, заключается в том, что -Warray-bounds
требует, чтобы VRP предупреждал» - VRP - распространение диапазона значений. Минимальные различия в источнике могут легко привести к поведению в оптимизаторе.
В любом случае, я думаю, что более важная вещь об этих проблемах с -Warray-bounds
заключается в том, что они, похоже, также привязаны к очень конкретным версиям компилятора. Например, эта ошибка (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43949), сообщаемая против 4.4.3 (насколько я знаю, эта ошибка может быть причиной того, что вызывает предупреждение для вас) как работает для 4.2.4, 4.5.1 и 4.6.0, а также в 4.5.0. Исправление для него, по-видимому, входило в версию 4.5.x компилятора.
Во всяком случае, в нижней строке: если это действительно проблемы для вас (т. Е, это не просто любопытство), вы можете рассмотреть один из следующих решений/исправления:
- двигаться к версия GCC, которая составляет 4.5.1 или лучше
- Работает над проблемой с изменением кода. Как упоминалось выше, небольшие изменения могут предотвратить предупреждение от того срабатывает
- отключения предупреждения с
-Wno-array-bounds
Что значение п? – Matt
@Mat: '0' конечно. Глобальные примитивы всегда инициализируются нулем. – orlp
@ nightcracker не похож 0 –