ChatGPT перевёл, и компилятор выдаёт предупреждение из-за того, что сравниваются два разных интегера — беззнаковый и со знаком. В данном случае есть int num_of_bits, есть unsigned int lastbits, и они напрямую сравниваются: if (lastbits < num_of_bits) { . Тут нет если не ошибки, то по крайней мере лёгкой оплошности в этом С коде?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Здравствуйте, Alekzander, Вы писали:
PD>>Да. Она описана не в for, а выше, поэтому может использоваться до выхода на свою }
A>До Студии 7.1 скоуп был от начала цикла до конца блока. Соответственно, два одинаковых цикла подрял с i написать было нельзя (второй должен был быть без объявления). Переносить проекты было незабываемое удовольствие.
Это был косяк студии, в стандарте такое если и было, то максимум во времена CFront
K>ChatGPT перевёл, и компилятор выдаёт предупреждение из-за того, что сравниваются два разных интегера — беззнаковый и со знаком. В данном случае есть int num_of_bits, есть unsigned int lastbits, и они напрямую сравниваются: if (lastbits < num_of_bits) { . Тут нет если не ошибки, то по крайней мере лёгкой оплошности в этом С коде?
Всё верно, это говнокод, и современные крестокомпиляторы тоже выдают предупреждение. Скасти одну из частей к типу другой, в данном случае неважно какую к чему
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Здравствуйте, Khimik, Вы писали:
K>Тут какое-то вычисление, сколько бит понадобится на хранение нескольких чисел указанного максимального размера. И меня смутило, что переменная bytecnt, которая вначале служит счётчиком цикла, используется также после цикла. Это нормально в C++?
Нет, это несовершенство старых компиляторов (VC 6.0 или старше). На современных компиляторах (начиная с VS 2002, она же msvc 7.0) такие гуси не взлетают.