我正在写一个用C语言处理字符串的函数,它是递归的。基本上,它所做的就是找到一些字符和'\0'
之间的字符串。如果在找到'\0'
之前,它遇到了特定的字符,它将递归地调用自己。
在CLion中编写时,我看到了来自Clang-Tidy的警告,这是我以前从未见过的。它说
Clang-Tidy:函数“function "在递归调用链中
我想知道这是CLion 20.02的新功能吗(我最近更新了它)?再说了,怎么修?
这是我的代码。
char *function(char *pos, <some arguments>) {
char *temp = pos + 1;
while (1) {
if (*temp == '\0') {
return temp;
} else if (*temp == '<something>') {
*temp = '\0';
if (*(temp + 1) == '\0') {
return function(temp + 1, <some arguments>);
} else if (*(temp + 1) == '<something>') {
if (*(temp + 2) == '\0') {
return function(temp + 2, <some arguments>);
} else {
return function(temp + 1, <some arguments>);
}
} else {
return function(temp, <some arguments>);
}
}
temp++;
}
}
1条答案
按热度按时间cld4siwp1#
是的,recent Clang-Tidy diagnoses recursion。如果你有意编写一个递归函数,并且你确信它不能在不允许递归的上下文中使用(例如,参见Clang-Tidy文档中的参考文献),那么忽略这个警告是合理的。由于“disallowed”更多的时候是一个策略问题而不是技术问题,所以您应该考虑清楚地说明函数是递归的。你应该考虑 * 不 * 使用递归,这通常对真实世界的代码更好。
此检查不在Clang-Tidy 10中。我很难找到Clang-Tidy 11的文档,但是Clang-Tidy 12的发行说明并没有将其列为新的,所以它看起来像是在11中添加的。