не оптимизированный вариант с инвариантом в теле цикла
С точки зрения программиста очевидно, что функция strelen _не_ модифицирует строку s, а потому может быть вычислена лишь однажды. Только вот компилирует этого не знает, придерживаясь принципа: все, что может быть передано по ссылке, _может_ быть изменено, поэтому strlen(s) заново вычисляется на _каждой_ итерации цикла, что при длинных строках снижает производительность более чем на порядок!
Исправленный вариант выглядит так:
n = strlen(s);
for(a = 0, x = 0; a < n; a++)
{
x += s[a];
}