#visual-c #integer #code-analysis #word
#visual-c #целое число #анализ кода #word
Вопрос:
У меня есть этот код:
bool bIsSampleConversationVideo =
m_aryWStudentAssignTypeIndex[wItem - 1] ==
CChristianLifeMinistryDefines::kSampleConversationVideo;
Когда я компилирую с анализом кода в 64-разрядной версии, я получаю следующее предупреждение для [wItem - ]
:
LNT1000 Подвыражение может переполниться перед назначением более широкому типу.
Когда я навожу курсор мыши на два элемента, я вижу:
wItem
имеет типWORD
1
имеет типint
Я знаю, что вы можете добавлять суффиксы к буквенным числам, L
например, и т.д., но не выясняйте, как указать целочисленный литерал как a . WORD
Возможно, я неправильно истолковал предупреждение. В любом случае, есть ли простое решение для предотвращения предупреждения об анализе кода?
Комментарии:
1.
WORD(1)
. Тем не менее, я должен признать, что я не понимаю, что пытается сказать предупреждение.wItem
будет повышен доint
перед вычитанием; это выражение не подвержено риску переполненияunsigned short
akaWORD
. Может быть, он думаетwItem
, что может быть нулевым, и поэтомуwItem-1
может быть отрицательным, и переполнениеsize_t
(тип индекса массива)?2. @IgorTandetnik Хороший момент. Но
for
цикл, в котором находится этот код, начинается с1
:for (WORD wItem = 1; wItem <= 4; wItem )
Поэтому мы никогда не получим0 - xx
сценарий.3. Ну, линтер может быть недостаточно умен, чтобы понять это.