Сравните два:
if (strstr(a, "earth")) // A1
return x;
if (strstr(a, "ear")) // A2
return y;
и
if (strstr(a, "earth")) // B1
return x;
else if (strstr(a, "ear")) // B2
return y;
Лично я чувствую, что else
избыточен и не позволяет ЦП прогнозировать ветвления.
В первом случае при выполнении A1 можно предварительно декодировать A2. А во втором он не будет интерпретировать B2, пока B1 не будет оценен как false.
Я нашел много (может быть, большинство?) Источников, использующих последнюю форму.
Впрочем, последняя форма выглядит лучше для понимания, потому что не так очевидно, что она будет вызывать return y
, только если a =~ /ear(?!th)/
без предложения else.