假设我们在库中有一个C函数funA,在funA内它将调用其他函数funB,funC等。 funB和funC可能会回调funA。所以问题是:
是否可以在funA内部检测到这种情况,例如:
void funA(void) {
if (...) {
// Calling back to funA
}
}
结论
最佳答案
可以使用静态标志来完成。
调用该函数时,如果未设置该标志,则将其设置并继续,否则立即返回。然后在函数末尾清除标志,以便再次输入。
void funcA(void)
{
static int callback = 0;
if (callback) return;
callback = 1;
...
callback = 0;
}
如果需要在多个线程中单独运行,则可以将变量声明为
_Thread_local
而不是static
。