Это даже не вопрос. warning: division by zero [-Wdiv-by-zero]
- Войдите на сайт для отправки комментариев
Приветствую всех.
Имею в коде такие строки:
const uint16_t mass[] = {1000, 9000, 50000}; const uint8_t mass_count = sizeof(mass)/mass[0];
mass_count используется несколько раз в коде (в циклах) и один раз в таком виде:
index = (index + 1) % mass_count;
Это нужно для перебора элементов массива от 0 до (mass_count - 1) и снова с 0 (mass[index]).
Код компилируется и работает. Но при компиляции выводится предупреждение (как в заголовке):
warning: division by zero [-Wdiv-by-zero]
Я понимаю, что это компилятор беспокоится, чтобы массив не был пустым иначе будет деление на ноль. Но он что - совсем не может увидеть, что массив изначально не пуст и как-минимум один элемент то в нем точно есть (и даже не один)?
Если изменить mass_count на конкретное значение (в данном случае - 3), то сообщение исчезает. Но я не хочу так делать, ведь может быть придется со временем изменять количество элементов массива и я могу просто забыть исправить это значение (mass_count). Да и пусть вообще "оно само считает" (микроконтроллер же!), тем более на этапе компиляции.
Как это можно решить? Или смириться?
sizeof
(mass)/mass[0];
6 / 1000 это не 3, а 0.
Етить колотить, спасибо! Элементарно же, вот я тупень....
rkit, еще раз спасибо!
Больше warning'а не видать, изгнали )))
А вот это не понял, не дорос ещё ))
Если не сложно объяснить где почитать (или так, на пальцах), буду благодарен. А сам я ещё не понимаю такое.
template - в гугле
constexpr - функция выполняется в момент компиляции
const T(&)[N] - безымянная ссылка на массив размера N