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



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

在CLion上写这篇文章时,我看到了Clang Tidy的警告,这是我以前从未见过的。上面写着

Clang Tidy:函数"Function"在递归调用链中

我想知道这是CLion 20.02的一个新功能吗(我最近更新了它(?此外,我该如何修复它?

这是我的密码。

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

是的,最近的Clang Tidy诊断递归。如果您有意编写递归函数,并且确信它不能在不允许递归的上下文中使用(例如,请参阅Clang Tidy文档中的引用(,那么忽略该警告是合理的。由于";被禁止";通常是一个策略问题而不是技术问题,您应该考虑清楚地记录该函数是递归的。您应该考虑而不是使用递归,这通常更适合真实世界的代码。

这张支票不在Clang Tidy 10中。我很难找到Clang Tidy 11的文档,但Clang Tity 12的发布说明并没有将其列为新文档,所以看起来它是在11中添加的。

最新更新