Как вы указываете целочисленный литерал как СЛОВО?

#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 aka WORD . Может быть, он думает wItem , что может быть нулевым, и поэтому wItem-1 может быть отрицательным, и переполнение size_t (тип индекса массива)?

2. @IgorTandetnik Хороший момент. Но for цикл, в котором находится этот код, начинается с 1 : for (WORD wItem = 1; wItem <= 4; wItem ) Поэтому мы никогда не получим 0 - xx сценарий.

3. Ну, линтер может быть недостаточно умен, чтобы понять это.