Как стать автором
Обновить

Комментарии 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 и исправил важные ошибки?)
Ни гугла, ни альфабет до сих пор нет в списке клиентов этой маленькой студии…
Мне кажется, они должны какие-то другие анализаторы использовать
Вызов функции strlen для того, чтобы узнать, является ли строка непустой — это неэффективный способ. Такую проверку можно произвести гораздо проще: if (*key[0] != '\0'), и не нужно будет проходить по всем элементам строки, если она непустая.

Любой state-of-the-art компилятор производит встраивание str*/mem* функций стандартной библиотеки (хотя это не совсем законно), и сделает эту оптимизацию самостоятельно, что позволяет оставить более читаемый код. https://godbolt.org/z/XWIlo3 (у MSVC традиционно есть некоторые проблемы)

Зарегистрируйтесь на Хабре , чтобы оставить комментарий