控制Clang警告

Eri*_*ner 11 llvm clang

我已经将SQLite合并源编译到我的iOS项目中,并clang在此行上发出警告

mask = (sizeof(long)==8) ? LARGEST_INT64 : 0x7fffffff;
Run Code Online (Sandbox Code Playgroud)

带有以下警告:

Implicit conversion from 'long long' to 'long' changes value from
9223372036854775807 to -1
[warn_impcast_integer_precision_constant]
Run Code Online (Sandbox Code Playgroud)

我已经启用-fdiagnostics-show-name了显示名称(warn_impcast_integer_precision_constant).

我当然不想改变SQLite源代码中的任何内容,因为我不想引入不可预见的副作用,所以我想为这一行禁用这个特定的警告.警告肯定是有效的,但无论如何都不能在sizeof检查到位时发生.

为了使此过程可以重现其他警告和诊断,有没有一种方法可以找出特定的警告类并禁用它们一行?不幸的是,我在所谓的clang/llvm"文档"中找不到任何东西.

ser*_*rvn 16

任何远程版本的clang应该打印与给定警告相关联的标志以及警告(在这种情况下是-Wconstant-conversion); 不知道为什么你没有看到这个.关闭它,你可以使用#pragma clang diagnostic ignored "-Wconstant-conversion".

  • 还要注意,如果你想重新启用这个检查(你应该),你可以用`#pragma clang diagnostic push`和`#pragma clang diagnostic pop包装它. (6认同)
  • 在Xcode中,您可以"查看>导航器>显示日志导航器"以查看实际的构建输出.选择您想要了解更多信息的警告或错误,然后单击该行右侧的"行"图标以查看输出(包括"警告:某事[-Wreason- why]"之类的内容. (2认同)