Может ли кто-то прояснить, может ли функция (и почему) присваиваться функции pure
или const
, если у нее есть указательный параметр.Функции GCC pure/const, которые принимают аргумент указателя
Согласно GCC documentation:
Некоторые из распространенных примеров чистых функций 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
является чистым?
В моем случае я хочу передать массив чистой функции и вычислить результат, основанный только на массиве. Кто-то успокаивает меня, что это нормально, и что когда значения в массиве меняются, а адрес нет, моя функция будет вызвана правильно.
Спасибо за статью, интересную. Но мой вопрос был конкретно о аргументах указателя на чистые функции. – jsj
@ trideceth12 тот же анализ применяется и к указателям. –
Итак, что произойдет, если 8 и 1 не известны во время компиляции? Например. они являются переменными? – Kata