我有一个简单的函数,可以计算字符串中的字母 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)
到目前为止我所发现的:
答案 0 :(得分:1)
因为您正在通过修改指针来创建副作用。
如果您只使用普通索引int而不是递增t
而不是递增它,那么gcc便可以毫无问题地对其进行优化。
修改指针有副作用。
另一种方法,只需简单地创建指针的副本,然后修改副本。再次优化。