如何解决如何在来自 clang 或 clang-tidy
问题是如何在有意使用 =
时收到错误使用 ==
的警告。
警告 -Wparentheses
在某些上下文中将赋值结果隐式转换为 bool
值时发出警告。但是,对于只是一个简单的 return 语句的函数,该警告会在 gcc 中触发,而不是在 clang 中触发。
在以下示例中,如果明确写入 (-DEXPLICIT),clang 和 gcc 都会发出警告,但对于较短的 return *x = *y;
,gcc 会发出警告(使用 -std=c99 -Wall
),但 clang 不会。
#include <stdio.h>
#include <stdbool.h>
bool is_equal(int *x,int *y)
{
#ifdef EXPLICIT
if(*x = *y) return true;
else return false;
#else
return *x = *y;
#endif
}
int main()
{
int foo = 17;
int bar = 42;
bool b = is_equal(&foo,&bar);
printf("%d %s %d\n",foo,(b?" == ":" != "),bar);
}
(这里,is_equal
的预期结果是一个相等测试,因此赋值是一个错误。)
我也希望 clang-tidy 检查 readability-implicit-bool-conversion
会触发,但它没有。
(更新: Clang 没有对 -Weverything
发出警告(与此相关),但是我可以使用 clang-tidy 来警告这个吗?)
有没有办法让 clang 或 clang-tidy 对这种 int-to-bool 转换发出警告?
我知道它并不“危险”,因为它定义明确且可移植,并且在现有代码中可能很常见,但它仍然是我希望能够检查的潜在错误。
>解决方法
*x = *y
:我认为你希望这是一个平等检查,但它目前是一项任务。将其更改为 *x == *y
,此处为 if(*x = *y) return true;
,此处为 return *x = *y;
。
我还建议将函数签名更改为 bool is_equal(const int *x,const int *y)
以明确该函数不应更改输入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。