LLVM:-Wno-ignored-qualifiers 等价物?

Dar*_*uuk 5 gcc llvm clang

使用 GCC,当-Wall -Wextra启用标志时,可以选择禁用以下警告-Wno-ignored-qualifiers

warning: 'const' type qualifier on return type has no effect
Run Code Online (Sandbox Code Playgroud)

有没有办法用 LLVM/Clang 实现相同的行为?我用谷歌搜索,但只找到了一些关于如何添加此错误报告功能的补丁相关页面。没有关于如何禁用它。

我正在使用 LLVM & Clang 3.0 版(从 SVN 源构建)。

注意:我打算在 SuperUser 上发布这个,但是那里没有一个关于 Clang 的问题,也没有 LLVM 标签,所以这让我很沮丧。如果这个问题无论如何都应该存在,请随意移动它。

[编辑]当我从终端运行我的 Makefile 时,似乎可以识别该选项。但是,当从 Eclipse (Helios) 运行时,它不会被识别。

【解决方法】找到了。显然,问题是 Eclipse(在 Ubuntu 下)是由 root 启动的。为什么会这样,我不知道,但效果是 $PATH 变量包含 root 将拥有的内容,而不是启动 Eclipse 的用户将拥有的内容。因此,Eclipse 使用的是较旧的系统范围内安装的 Clang (2.80) 版本。在 Project Properties -> C/C++ Build -> Environment 中添加正确的 PATH 变量修复了这个问题。

Nic*_*ley 3

您使用什么版本的 Clang?-Wno-ignored-qualifiers对我有用:

% clang -Wall -Wextra -c foo.c
foo.c:1:1: warning: 'const' type qualifier on return type has no effect
      [-Wignored-qualifiers]
const int foo();
^~~~~
1 warning generated.
% clang -Wall -Wextra -Wno-ignored-qualifiers -c foo.c
%
Run Code Online (Sandbox Code Playgroud)

一般来说,您可以查看这些.td文件,它们在收集所有诊断信息方面做得非常好。(Clang 文档中有一个 TODO 使用 tblgen 自动生成文档,但这尚未完成。)

在这种情况下,例如您会看到DiagnosticSemaKinds.td

def warn_qual_return_type : Warning< 
  "'%0' type qualifier%s1 on return type %plural{1:has|:have}1 no effect">,
  InGroup<IgnoredQualifiers>, DefaultIgnore;
Run Code Online (Sandbox Code Playgroud)

它显示了它属于哪个诊断组 ( IgnoredQualifiers)。然后你可以查看一下命令行上调用了DiagnosticGroups.td什么:IgnoredQualifiers

def IgnoredQualifiers : DiagGroup<"ignored-qualifiers">;
Run Code Online (Sandbox Code Playgroud)

也是如此-Wno-ignored-qualifiers。Clang 尽可能地尝试与 GCC 兼容,因此使用 GCC 名称通常是可行的。