什么是 "Clang-Tidy: Function is within a recursive call chain" ?如何解决?

What is "Clang-Tidy: Function is within a recursive call chain" ? How to fix it?

我正在用 C 编写一个处理字符串的函数,它是递归的。基本上它所做的是在一些字符和 '[=12=]' 之间找到一个字符串。如果在找到'[=12=]'之前,它命中特定的字符,它会递归调用自己。

在用CLion写的时候,看到Clang-Tidy的警告,以前没见过。它说

Clang-Tidy: Function 'function' is within a recursive call chain

我想知道它是 CLion 20.02 的新功能吗(我最近更新了它)?而且,我该如何解决?

这是我的代码。

char *function(char *pos, <some arguments>) {
    char *temp = pos + 1;
    while (1) {
        if (*temp == '[=11=]') {
            return temp;
        } else if (*temp == '<something>') {
            *temp = '[=11=]';
            if (*(temp + 1) == '[=11=]') {
                return function(temp + 1, <some arguments>);
            } else if (*(temp + 1) == '<something>') {
                if (*(temp + 2) == '[=11=]') {
                    return function(temp + 2, <some arguments>);
                } else {
                    return function(temp + 1, <some arguments>);
                }
            } else {
                return function(temp, <some arguments>);
            }
        }
        temp++;
    }
}

是的,recent Clang-Tidy diagnoses recursion。如果您有意编写递归函数,并且确信它不能在不允许递归的上下文中使用(例如,请参阅 Clang-Tidy 文档中的参考资料),那么忽略该警告是合理的。由于“不允许”更多地是政策问题而不是技术问题,因此您应该考虑清楚地记录该函数是递归的。并且您应该考虑 而不是 使用递归,这通常对 real-world 代码更好。

此支票不在 Clang-Tidy 10. I'm having trouble finding docs for Clang-Tidy 11, but the release notes for Clang-Tidy 12 中,请勿将其列为新支票,因此它看起来像是在 11 中添加的。