如何让 clang 警告非常简单的缩小
How to get clang to warn about very simple narrowing
如果我正在使用 clang 工具,推荐的获取 clang 或 clang 工具链的某些部分的方法是什么,例如将 int
传递给接受 short
的函数可能是个坏主意?
给出这个非常简单的程序
static short sus = 0;
void foo(short us) {
sus = us;
}
int main() {
int i = 500000;
foo(i); // any indication from clang this might be a bad idea
return 0;
}
- 我试过 -Wall 和 -Wextra,
- 我已经尝试使用 cppcoreguidelines-narrowing-conversions 进行 clang-tidy
- 我试过 clang -analyze
我一定漏掉了一些非常简单的东西,对吧?
-Weverything
选项在这种情况下很有用。它启用 clang 具有的每个警告选项,包括 -Wall -Wextra
不包括的许多选项。其中许多是无用的或适得其反的,但如果有一个警告您认为有问题的代码,这将使您找到它,并告诉您哪个选项将具体启用它。 Try it on godbolt.
在这种情况下,使用 -Weverything
向我们显示:
<source>:8:7: warning: implicit conversion loses integer precision: 'int' to 'short' [-Wimplicit-int-conversion]
foo(i); // any indication from clang this might be a bad idea
~~~ ^
所以你想要的选项是-Wimplicit-int-conversion
。
如果我正在使用 clang 工具,推荐的获取 clang 或 clang 工具链的某些部分的方法是什么,例如将 int
传递给接受 short
的函数可能是个坏主意?
给出这个非常简单的程序
static short sus = 0;
void foo(short us) {
sus = us;
}
int main() {
int i = 500000;
foo(i); // any indication from clang this might be a bad idea
return 0;
}
- 我试过 -Wall 和 -Wextra,
- 我已经尝试使用 cppcoreguidelines-narrowing-conversions 进行 clang-tidy
- 我试过 clang -analyze
我一定漏掉了一些非常简单的东西,对吧?
-Weverything
选项在这种情况下很有用。它启用 clang 具有的每个警告选项,包括 -Wall -Wextra
不包括的许多选项。其中许多是无用的或适得其反的,但如果有一个警告您认为有问题的代码,这将使您找到它,并告诉您哪个选项将具体启用它。 Try it on godbolt.
在这种情况下,使用 -Weverything
向我们显示:
<source>:8:7: warning: implicit conversion loses integer precision: 'int' to 'short' [-Wimplicit-int-conversion]
foo(i); // any indication from clang this might be a bad idea
~~~ ^
所以你想要的选项是-Wimplicit-int-conversion
。