Количество выполнений strlen(word)
зависит от:
- Если
word
объявлено как константа (данные постоянны)
- Или компилятор может обнаружить это
word
не изменено.
Возьмите следующий пример:
char word[256] = "Grow";
for (i = 0; i < strlen(word); ++i)
{
strcat(word, "*");
}
В этом примере переменная word
изменяется в цикле:
0) «Расти» - длина == 4
1) "Grow *" - длина == 5
2) «Расти **» - длина == 6
Однако компилятор может выделить вызов strlen
, поэтому он вызывается один раз, если переменная word
объявлена как константа:
void my_function(const char * word)
{
for (i = 0; i < strlen(word); ++i)
{
printf("%d) %s\n", i, word);
}
return;
}
Функция объявила, что переменная word
является постоянными данными (фактически, указатель на постоянные данные ). Таким образом, длина не изменится, поэтому компилятор может вызывать strlen
только один раз.
Если вы сомневаетесь, вы всегда можете выполнить оптимизацию самостоятельно, что может привести к более читаемому коду в этом случае.