strcmp для пустой строки

Я просматривал некоторый код и видел, как кто-то выполнил

if (0 == strcmp(foo,""))

Мне любопытно, потому что я думаю, что было бы быстрее сделать

if (foo[0] == '\0')

Правильно ли это или strcmp достаточно оптимизирован, чтобы сделать их одинаковыми.

(Я понимаю, что даже если бы была какая-то разница, она была бы небольшой, но думаю, что вы сохраните хотя бы несколько инструкций, используя мой метод.)

26
задан Shamim Hafiz 1 June 2011 в 14:50
поделиться

3 ответа

Я не вижу преимущества использования strcmp в этом случае. Компилятор может быть достаточно умным, чтобы оптимизировать его, но это не будет быстрее, чем проверка байта '\ 0' напрямую. Исполнитель этого мог бы выбрать эту конструкцию, потому что он думал, что она более читабельна, но я думаю, что в этом случае это вопрос вкуса. Хотя я бы написал чек немного по-другому, так как эта идиома, по-видимому, чаще всего используется для проверки на наличие пустой строки:

if( !*str )

и

if( *str )

для проверки непустая строка.

5
ответ дан 28 November 2019 в 07:51
поделиться

Хороший оптимизирующий компилятор может оптимизировать вызов функции и затем исключить цикл из встроенной функции. Ваш метод не может быть медленнее, хотя есть вероятность, что он будет такой же скорости.

1
ответ дан 28 November 2019 в 07:51
поделиться

Это настолько же микрооптимизация, как и она, но я полагаю, что если вы добавили проверку нуля перед индексированием foo (если вы не знаете, что она никогда не будет равна нулю), это технически сэкономит накладные расходы при вызове функции.

0
ответ дан 28 November 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: