铿锵W旗令

Jer*_*mad 14 c++ clang++

我注意到一个有趣的行为与clang(我使用3.6.0),我没有在文档或其他任何地方找到任何关于它的参考.这是一个小例子:

int main(){
    int a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我编译它,clang++ -Wall -W -Werror -Wno-error=unused-variable main.cpp我有预期的警告:

main.cpp:2:9: warning: unused variable 'a' [-Wunused-variable]
    int a;
1 warning generated.
Run Code Online (Sandbox Code Playgroud)

现在,让我们试试吧 clang++ -Werror -Wno-error=unused-variable -Wall -W main.cpp

main.cpp:2:9: error: unused variable 'a' [-Werror,-Wunused-variable]
    int a;
1 error generated.
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?这是预期的吗?对于这一点,gcc编译两行.

Jer*_*mad 1

这是我得到的答复:

我认为更好的标题是 -Wno-error 位置依赖于命令行,而 -Werror 则不是。重要的是诊断是错误还是警告。举个例子:

int main() {
  int a;
  return 0;
}

$ clang main.cpp -Wunused-variable
Run Code Online (Sandbox Code Playgroud)

这会给出未使用的变量警告。

$ clang main.cpp -Werror -Wunused-variable
$ clang main.cpp -Wunused-variable -Werror
Run Code Online (Sandbox Code Playgroud)

这两者都会产生未使用的变量错误。-Werror 不会根据位置改变行为。

$ clang main.cpp -Werror -Wno-error=unused-variable -Wunused-variable
$ clang main.cpp -Werror -Wunused-variable -Wno-error=unused-variable
Run Code Online (Sandbox Code Playgroud)

第一个给出错误,第二个给出警告。这意味着 -Wno-error=* 与位置相关。(GCC 将为这两条线发出警告。)

-Werror 不交互或依赖于命令行上的警告。-Wno-error=warning 确实取决于其与 -Wwarning 的相对位置。

我对此非常满意。它应该写在某个地方(我可能错过了!)