﻿# V661\. Suspicious expression 'A\[B < C\]'\. Probably meant 'A\[B\] < C'\.

Анализатор обнаружил подозрительный фрагмент кода, в котором осуществляется доступ к элементу массива\. В качестве индекса массива используется логическое выражение\.

Примеры таких выражений:  Array\[A \>\= B\], Array\[A \!\= B\]\. Возможно, что закрывающаяся квадратная скобка стоит не на своем месте\. Подобные ошибки, чаще всего возникают из\-за опечатки\.

Рассмотрим пример некорректного кода:

```cpp
if ((bs->inventory[INVENTORY_ROCKETLAUNCHER] <= 0 || 
     bs->inventory[INVENTORY_ROCKETS < 10]) && <<== ERROR!
    (bs->inventory[INVENTORY_RAILGUN] <= 0 || 
     bs->inventory[INVENTORY_SLUGS] < 10)) {
        return qfalse;
}
```

Такой код компилируется, но работает неправильно\. С большой вероятностью, здесь должно быть написано:

```cpp
if ((bs->inventory[INVENTORY_ROCKETLAUNCHER] <= 0 || 
     bs->inventory[INVENTORY_ROCKETS] < 10) &&
    (bs->inventory[INVENTORY_RAILGUN] <= 0 || 
     bs->inventory[INVENTORY_SLUGS] < 10)) {
        return qfalse;
}
```

Примечание\. Анализатор выдает предупреждения не всегда, когда в квадратных скобках находится логическое выражение\. Иногда это оправдано\. Например, исключение составляет случай, когда массив состоит всего из двух элементов:

```cpp
int A[2];
A[x != y] = 1;
```