У меня есть простая функция, которая считает букву t в строке:
#include <stdio.h>
#include <string.h>
static int count_t_letters(const char *t) {
int r;
r = 0;
while(*t) {
if(*t == 't') {
++r;
}
++t;
}
return r;
}
int main() {
printf("%i", count_t_letters("test"));
}
вот оптимизация, которую я ожидал:
int main() {
printf("%i", 2);
}
Почемуэта простая функция не оптимизирована, как я ожидал, ни в gcc, ни в clang?( godbolt )
Что я выяснил до сих пор:
- Простые функции с аргументами целочисленного указателя оптимизированы до постоянной ( godbolt )
- Использование C ++ с constexpr включает эту оптимизацию ( godbolt )
- Clang может выполнить такую оптимизацию, если после
if
нет ++t
( Годболт )