在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();
}