Я ищу термин для функций, которые не pure и не обязательно reentrant , но при вызове во второй раз создают то же состояние, что и при вызове первоговремя.
Например, эта функция не будет соответствовать критериям:
void CounterExample(int value)
{
static int STORE[5];
static int STORE_COUNT=0;
STORE[STORE_COUNT++] = value;
}
В то время как эта функция будет:
void Example(int value)
{
static int STORE[5];
static int STORE_COUNT=0;
STORE_COUNT = 0;
STORE[STORE_COUNT++] = value;
}
В частности, я думаю об оборудованиифункции инициализации.Часто они настраивают GPIO определенным образом, проходят последовательность включения, а затем каким-то образом настраивают оборудование.Если позже мне нужно будет заново инициализировать аппаратное обеспечение, я могу просто снова вызвать эту функцию.Однако, если функция также устанавливает некоторые программные структуры, скажем, добавляя к массиву сконфигурированных структур, то я не могу вызвать эту функцию снова, не отменив сначала то, что сделала функция.
Например, функция инициализации драйвера связи может включать драйвер связи, отправлять некоторые команды конфигурации и затем вызывать другую функцию с именем AddCommsCallback()
, которая регистрирует обратный вызов по умолчанию для данных, полученных устройством связи.Если я когда-либо хотел сбросить драйвер связи, я не могу просто снова вызвать эту функцию, потому что обратный вызов по умолчанию будет добавлен к существующему устаревшему обратному вызову.
Есть ли конкретная терминология, связанная с этими двумя типами функций (кромеобщие условия заслуги!)?