Re: Правильное выполнение арифметических операций?
Добавлено: Пт мар 25, 2022 19:38:15
Тем сайтом пользоваться не умею ибо только что узнал о его существовании,но у меня в vmlab такое же поведение.Оно и работает, а если оставить просто 500, то уже нет.
Или вместо того чтобы суффиксы к 500 дописывать можно дописать unsigned long к первому сомножителю. Так тоже работает.
Полностью признаю такой подход правомерным в случае коммерческого проекта. Понимаю что далеко не все имеют неограниченное количество свободного времени как я,чтобы глубоко вникать в тонкости поведения и особенности используемых инструментов.Я не стал искать истинную причину странного поведения, так как думать надо было о решении самой задачи проекта, а не о различных мелочах и неоднозначных особенностях инструментов, которые через неделю снова забудутся. В итоге просто обложил выражение скобками и типами, явно обозначив то, что компилятор должен сделать. Да, некрасиво. Но это дает стабильный результат и экономит время.
Возможность явных указаний для того и существует чтобы программист мог четко сформулировать свои пожелания к компилятору,не надеясь что тот догадается сам чего от него хотели. К тому же наличие этих явных указаний упрощает чтение сложных мест в коде - не приходится задумываться о порядке выполнения действий и приведений типов.
Хотя тут тоже есть свои странности в gcc. Например по умолчанию тип char - знаковый. И написание в моем примере char buf[40] компилятор воспринимает молча. Если же ему явно сказать signed char buf[40] - то он начинает сыпать предупреждениями при вызове
функций,ожидающий "просто char". Вот как хотите - так такие странности поведения и понимайте.
Создается впечатление что для компилятора три большие разницы - "просто char",signed char и unsigned char :-)