Как стать автором
Обновить

Комментарии 4

Интересно, почему нет комментариев? Что все заняты работой или уже нет программистов которые знают «С» и «С++»? В «С» и «С++» нужно добавить флаг -Walloc_memmory который будет информировать, что в файле в таком рядке виделяется столько байт(и если указатель на структуру или масив, а размер всего <=8 байт(для 64 біт), есть потенциально возможно ошибка программиста, то есть опечатка
 "sizeof(pointer_name)" вместо "sizeof(*pointer_name)"
).
В каком компиляторе есть такая опция? Ни GCC ни clang ни MSVC её не содержат.
Но эта ошибка никак не проявит себя. Неважно, как написать:
(20 * 1UL << 20)
(20 * (1UL << 20))
((20 * 1UL) << 20)
Результат всё равно всегда одинаковый!

И более того, результат не будет отличаться от простого 20 << 20 — чисто в силу свойств операций. Есть, правда, один нюанс:


std::cout << (20 * 1UL << 32) << std::endl; // предупреждение PVS, результат корректный
std::cout << (20 << 32) << std::endl; // предупреждение компилятора, результат = 0
std::cout << (20UL << 32) << std::endl; // нет предупреждений, результат корректный
Зарегистрируйтесь на Хабре, чтобы оставить комментарий