Comments 15
Оказывается, из ничего тоже можно сделать статью на Хабр!
if (strlen(*key) > 0)
Такую проверку можно произвести гораздо проще: if (*key[0] != '\0')Это конечно так, но не надо забывать, что приоритет операторов другой — *(key[0]) вместо более близкого по смыслу (*key)[0]
Интересно, разве компилятор не делает эту оптимизацию для strlen(*key) > 0 самостоятельно? Вроде не бы не рокет сайнс.
Но так-то да, я бы, скорее, это оставил компилятору…
А тут это ничего не изменит т.к. [0] справа и звёздочка слева это одно и то же.
Можно было ещё написать **key или key[0][0].
Но это тут, где индекс нулевой, а вообще да, я в таких конструкциях (когда одновременно и префиксный и постфиксный операторы есть) всегда скобки ставлю чтобы сразу видеть желаемый и фактический порядок действий.
Вызов функции strlen для того, чтобы узнать, является ли строка непустой — это неэффективный способ. Такую проверку можно произвести гораздо проще: if (*key[0] != '\0'), и не нужно будет проходить по всем элементам строки, если она непустая.
Любой state-of-the-art компилятор производит встраивание str*
/mem*
функций стандартной библиотеки (хотя это не совсем законно), и сделает эту оптимизацию самостоятельно, что позволяет оставить более читаемый код. https://godbolt.org/z/XWIlo3 (у MSVC традиционно есть некоторые проблемы)
PVS-Studio хотел, но не смог найти баги в robots.txt