如何让 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;
}

我一定漏掉了一些非常简单的东西,对吧?

-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