Сегодня я читал о чистой функции, запутался в ее использовании:
Функция называется чистой, если она возвращает тот же набор значений для одного и того же набора входов и не имеет наблюдаемых побочных эффектов.
например. strlen() - чистая функция, а rand() - нечистая.
__attribute__ ((pure)) int fun(int i)
{
    return i*i;
}
int main()
{
    int i=10;
    printf("%d",fun(i));//outputs 100
    return 0;
}
Вышеприведенная программа ведет себя так же, как и при отсутствии объявления pure.
  В чем преимущества объявления функции как pure [если нет изменения в выходе]?
