gpt4 book ai didi

c - 如何检查函数是否正在回调自身

转载 作者:行者123 更新时间:2023-12-02 08:03:57 25 4
gpt4 key购买 nike

假设我们在库中有一个 C 函数 funA,在 funA 内部它会调用一些其他函数 funB、funC 等。 funB 和 funC 可能会回调 funA。所以问题是:是否有可能在 funA 内部检测到这种情况,例如:

void funA(void) {
if (...) {
// Calling back to funA
}

}

结论

  • 在单线程环境中,静态/全局变量可以工作。
  • 在多线程环境中,必须依赖 TLS 支持。
  • 没有任何答案可以仅通过语言 (C) 级别的技巧来实现这一目标

最佳答案

这可以通过静态标志来完成。

调用函数时,如果没有设置标志则设置它并继续,否则立即返回。然后在函数结束时,清除标志以便再次输入。

void funcA(void) 
{
static int callback = 0;

if (callback) return;
callback = 1;
...
callback = 0;
}

如果这需要在多个线程中单独工作,您可以将变量声明为 _Thread_local 而不是 static

关于c - 如何检查函数是否正在回调自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53787899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com