在C语言中有没有一种方法可以做到:如果一个函数以前在代码的前一部分中没有被调用过,那么就调用它;否则,如果它以前被调用过,那么就不要调用它?
下面是一些代码:

while (function hasn't been called)
{
    // do some code
}
else (call the function)
{
    // do something else
}

像那样?

最佳答案

嗯,很简单。只需使用一个静态变量。

void foo() {
    static int hasBeenCalled = 0;
    if(!hasBeenCalled) {
        /* Do stuff */
        hasBeenCalled = 1;
    }
}

不必对全局变量和静态变量执行初始化,因为它们的默认值为0,而局部变量则不必。但我觉得它看起来好多了。globals和statics很少使用,所以我不认为利用这个“特性”有什么意义。
从技术上讲,您仍然使用上述方法调用函数。如果这是一个问题,你可以使用一个全局变量,把我使用的逻辑放在外面。下面是一个工作示例:
int hasBeenCalled = 0;

void foo() {
    while(!hasBeenCalled) {
        /* Do stuff that eventually calls bar() */
    }
}

void bar() {
    hasBeenCalled=1;
    /* Do stuff */
}

int main() {
    foo();
}

09-30 17:43