什么是 "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 中添加的。
我正在用 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 中添加的。