История изменений
Исправление firkax, (текущая версия) :
for (auto i = size(); i >= 0; --i) // oops
Так это дефективный код, сразу видно. Скорее всего писался кем-то далёким от нормального программирования. Проверять переход в цикле через ноль через i<0 даже для signed это что-то плохо пахнущее. Ну и auto, да ещё и всунутое внутрь императивного кода, выдаёт с++ника. А ещё скорее всего тут баг - цикл будет сделан size()+1 раз, а не size() раз, как обычно нужно в таких циклах. Вобщем, куда ни глянь, везде проблема в программисте. И да, именно такие недопрограммисты любят int-ы везде сувать, возможно потому что они сглаживают их слабоумие.
Нужно переписать так:
size_t i;
for(i=size(); i--; ) {
}
или так
for(i=size(); i; i--) {
}
size_t i;
i = size();
do {
} while(i--);
Я говорил что это полезно для корректных программ, для некорректных полезен -fsantize + -fanalyzer.
Я и пишу про корректные программы.
if (ckd_add(&x, x, 10)) goto err;
Это только в новых компиляторах будет работать, для переносимого кода не годится.
Исходная версия firkax, :
for (auto i = size(); i >= 0; --i) // oops
Так это дефективный код, сразу видно. Скорее всего писался кем-то далёким от нормального программирования. Проверять переход в цикле через ноль через i<0 даже для signed это что-то плохо пахнущее. Ну и auto, да ещё и всунутое внутрь императивного кода, выдаёт с++ника. А ещё скорее всего тут баг - цикл будет сделан size()+1 раз, а не size() раз, как обычно нужно в таких циклах. Вобщем, куда ни глянь, везде проблема в программисте. И да, именно такие недопрограммисты любят int-ы везде сувать, возможно потому что они сглаживают их слабоумие.
Нужно переписать так:
size_t i;
for(i=size(); i--; ) {
}
size_t i;
i = size();
do {
} while(i--);
Я говорил что это полезно для корректных программ, для некорректных полезен -fsantize + -fanalyzer.
Я и пишу про корректные программы.
if (ckd_add(&x, x, 10)) goto err;
Это только в новых компиляторах будет работать, для переносимого кода не годится.