﻿# V804\. Decreased performance\. The 'Foo' function is called twice in the specified expression to calculate length of the same string\.

Анализатор обнаружил конструкцию, которую потенциально можно оптимизировать\. В одном выражении дважды вычисляется длина одной и той же строки\. Для вычисления длины используются такие функции, как strlen, lstrlen, \_mbslen и так далее\. Если данное выражение вычисляется много раз или строки имеют большую длину, то данный участок кода рационально оптимизировать\.

Для оптимизации можно предварительно вычислить длину строки и поместить её во временную переменную\.

Рассмотрим пример:

```cpp
if ((strlen(directory) > 0) &&
    (directory[strlen(directory)-1] != '\\'))
```

Скорее всего, данный код обрабатывает только одну строку и его оптимизировать не надо\. Но если код вызывается очень часто, то его следует переписать\. Улучшенный вариант кода:

```cpp
size_t directoryLen = strlen(directory);
if ((directoryLen > 0) && (directory[directoryLen-1] != '\\'))
```

Иногда предупреждение V804 помогает выявить гораздо более критические ошибки\. Рассмотрим пример:

```cpp
if (strlen(str_1) > 4 && strlen(str_1) > 8)
```

Здесь используется некорректное имя переменной\. Код должен выглядеть следующим образом:

```cpp
if (strlen(str_1) > 4 && strlen(str_2) > 8)
```