Предупреждение C6268
Неправильный порядок операций: ('TYPE1')('TYPE2')x + y. Возможные отсутствующие скобки в ('TYPE1')('TYPE2')x + y)
Это предупреждение указывает, что сложное выражение приведения может включать проблему приоритета при выполнении арифметики указателя. Так как группирует группу более тесно, чем двоичные операторы, результат может не быть тем, что предназначен программист. В некоторых случаях этот дефект вызывает неправильное поведение или сбой программы.
Замечания
В выражении, например:
(char *)p + offset
смещение интерпретируется как смещение в символах; Однако выражение, например:
(int *)(char *)p + offset
эквивалентно правилу
((int *)(char *)p) + offset
и поэтому смещение интерпретируется как смещение целых чисел. Другими словами, это эквивалентно следующему:
(int *)((char *)p + (offset * sizeof(int)))
что, скорее всего, не будет тем, что программист намеревался.
В зависимости от относительных размеров двух типов это смещение может привести к переполнению буфера.
Имя анализа кода: MISPARENTHESIZED_CASTS
Пример
Следующий код создает это предупреждение:
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)(char *)p + offset_in_bytes;
// code ...
}
Чтобы исправить это предупреждение, используйте следующий код:
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)((char *)p + offset_in_bytes);
// code ...
}
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по