PVS-Studio corporate blog
Comments 14
+39

Оказывается, из ничего тоже можно сделать статью на Хабр!

0
if (strlen(*key) > 0)
Такую проверку можно произвести гораздо проще: if (*key[0] != '\0')
Это конечно так, но не надо забывать, что приоритет операторов другой — *(key[0]) вместо более близкого по смыслу (*key)[0]
+2

Интересно, разве компилятор не делает эту оптимизацию для strlen(*key) > 0 самостоятельно? Вроде не бы не рокет сайнс.

+6
Выходит, что предлагаемая замена не даёт обещанного прироста в перфомансе, зато читается хуже и вызывает больше вопросов. Такая подсказка анализатора скорее вредна, чем безобидна?
+2
Сложный вопрос. А вдруг вы этот код будете славным Borland C++ 3.1 компилировать?

Но так-то да, я бы, скорее, это оставил компилятору…
0

Разработчики, которые пишут софт для внутренних нужд компании обычно знают чем будет компилироваться код. Поэтому могут не жертвовать качеством кода в угоду разному легаси.

+1

А тут это ничего не изменит т.к. [0] справа и звёздочка слева это одно и то же.
Можно было ещё написать **key или key[0][0].
Но это тут, где индекс нулевой, а вообще да, я в таких конструкциях (когда одновременно и префиксный и постфиксный операторы есть) всегда скобки ставлю чтобы сразу видеть желаемый и фактический порядок действий.

+4
Это изменит восприятие кода человеком.
Если после кода if (*key[0] != '\0') вдруг понадобится проверить следующий символ в строке, то другой человек запросто может скопипастить и заменить на if (*key[1] != '\0').
0
может для правильного восприятия и лучшей читаемости макрос препроцессора использовать?
+8
А может гугл уже проверил через PVS-Studio и исправил важные ошибки?)
0
Ни гугла, ни альфабет до сих пор нет в списке клиентов этой маленькой студии…
0
Мне кажется, они должны какие-то другие анализаторы использовать
Only those users with full accounts are able to leave comments. , please.