Я просматривал некоторый код и видел, как кто-то выполнил
if (0 == strcmp(foo,""))
Мне любопытно, потому что я думаю, что было бы быстрее сделать
if (foo[0] == '\0')
Правильно ли это или strcmp достаточно оптимизирован, чтобы сделать их одинаковыми.
(Я понимаю, что даже если бы была какая-то разница, она была бы небольшой, но думаю, что вы сохраните хотя бы несколько инструкций, используя мой метод.)
Я не вижу преимущества использования strcmp в этом случае. Компилятор может быть достаточно умным, чтобы оптимизировать его, но это не будет быстрее, чем проверка байта '\ 0' напрямую. Исполнитель этого мог бы выбрать эту конструкцию, потому что он думал, что она более читабельна, но я думаю, что в этом случае это вопрос вкуса. Хотя я бы написал чек немного по-другому, так как эта идиома, по-видимому, чаще всего используется для проверки на наличие пустой строки:
if( !*str )
и
if( *str )
для проверки непустая строка.
Хороший оптимизирующий компилятор может оптимизировать вызов функции и затем исключить цикл из встроенной функции. Ваш метод не может быть медленнее, хотя есть вероятность, что он будет такой же скорости.
Это настолько же микрооптимизация, как и она, но я полагаю, что если вы добавили проверку нуля перед индексированием foo (если вы не знаете, что она никогда не будет равна нулю), это технически сэкономит накладные расходы при вызове функции.