К сожалению, код, который вы используете для иллюстрации своих намерений, не очень ясен. Но вы спросили это:
... если функция не была вызвана ранее в предыдущей части кода, затем вызвать ее, в противном случае, если она была вызвана раньше, не вызывать ее?
Помимо использования логического значения, вы также можете использовать указатель на функцию. Указатель на функцию указывает на функцию, которая должна вызываться при первом вызове функции. Затем эта функция изменяет указатель функции на указатель на функцию, которая должна вызываться после первого раза.
static void foo_first_time(void);
static void foo_after_first_time(void);
void (*foo)(void) = foo_first_time;
static void foo_first_time(void) {
foo = foo_after_first_time;
// do some code
// ...
}
static void foo_after_first_time(void) {
// do something else
// ...
}
Теперь вызывающая сторона просто вызывает foo()
в обычном режиме. Первый раз вызовет foo_first_time
, но последующие вызовы вызовут foo_after_first_time
.
int main () {
foo(); // calls foo_first_time
foo(); // calls foo_after_first_time
foo(); // calls foo_after_first_time again
}