Может кто-то прояснит, может ли (и почему) функция присваиваться pure
или const
, если у нее есть указательный параметр.
В соответствии с документацией GCC:
Некоторые из общих примеров чистых функций - это strlen или memcmp.
Вся суть чистой функции состоит в том, что ее нужно вызывать только один раз для одних и тех же параметров, т.е. результат может быть кэширован, если компилятор считает, что он подходит для этого, однако как это работает для memcmp?
например:
char *x = calloc(1, 8);
char *y = calloc(1, 8);
if (memcmp(x, y, 8) > 0)
printf("x > y\n");
x[1] = 'a';
if (memcmp(x, y, 8) > 0)
printf("x > y\n");
Параметры второго вызова memcmp идентичны первому (указатели указывают на один и тот же адрес), как компилятор знает, не использовать результат от первого вызова, если memcmp
является чистым?
В моем случае я хочу передать массив чистой функции и вычислить результат, основанный только на массиве. Кто-то успокаивает меня, что это нормально, и что когда значения в массиве меняются, а адрес нет, моя функция будет вызвана правильно.