Pull to refresh

Comments 15

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

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

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

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

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

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

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

Это изменит восприятие кода человеком.
Если после кода if (*key[0] != '\0') вдруг понадобится проверить следующий символ в строке, то другой человек запросто может скопипастить и заменить на if (*key[1] != '\0').
может для правильного восприятия и лучшей читаемости макрос препроцессора использовать?
А может гугл уже проверил через PVS-Studio и исправил важные ошибки?)
Ни гугла, ни альфабет до сих пор нет в списке клиентов этой маленькой студии…
Мне кажется, они должны какие-то другие анализаторы использовать
UFO landed and left these words here
Sign up to leave a comment.