Всем привет!
Я изучаю язык С, понемного читаю разные книги, и изучаю как работают стандартные функции библиотеки. Затем пытаюсь реализовать их сам. Пользуюсь сайтом cppreference и исходниками libc-OpenBSD когда хочу сравнить свой код или посмотреть как сделано там, для сравнения использую godbolt Compiler Exlorer.
Так вот, написал я такой код для стандартной функции strrchr:
char *strrchr(char const *beg, int chr)
{
char const *fnd;
for (fnd = NULL; *beg != '\0'; ++beg)
if (*beg == (char)chr)
fnd = beg;
return (char *)fnd;
}
Затем посмотрел, как это реализовано в OpenBSD (не дословно):
char *strrchr(char const *beg, int chr)
{
char const *fnd;
for (fnd = NULL;; ++beg) {
if (*beg == (char)chr)
fnd = beg;
if (*beg == '\0')
return (char *)fnd;
}
}
Почему компилятор для моей реализации, генерирует код хуже, чем для реализации OpenBSD?
(в обоих случаях использовал: сперва без оптимизаций, затем флаг оптимизации -O3)
В чем принципиальная разница, не могу понять?
Что можно почитать чтобы понять как писать такой C код, чтобы компилятор генерировал хороший код?
От чего это вообще зависит?