问题 控制Clang警告


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

mask = (sizeof(long)==8) ? LARGEST_INT64 : 0x7fffffff;

带有以下警告:

Implicit conversion from 'long long' to 'long' changes value from
9223372036854775807 to -1
[warn_impcast_integer_precision_constant]

我启用了 -fdiagnostics-show-name 显示名称(warn_impcast_integer_precision_constant)。

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

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


2012
2017-09-18 10:06


起源



答案:


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


16
2017-09-18 21:35



你在哪里看到的 constant-conversion?除了警告文本之外,Xcode不会向我显示任何内容。 - Erik Aigner
哦...... Xcode对clang的输出做了很多操作;我不确定它是做什么的。 - servn
在Xcode中你可以 View > Navigators > Show Log Navigator 看到实际的构建输出。选择您想要了解更多信息的警告或错误,然后单击该行右侧的“行”图标以查看输出(包括类似的内容) warning: something something [-Wreason-why] - jemmons
另请注意,如果您想重新启用此检查(并且您应该),则可以将其包装起来 #pragma clang diagnostic push 和 #pragma clang diagnostic pop - jemmons


答案:


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


16
2017-09-18 21:35



你在哪里看到的 constant-conversion?除了警告文本之外,Xcode不会向我显示任何内容。 - Erik Aigner
哦...... Xcode对clang的输出做了很多操作;我不确定它是做什么的。 - servn
在Xcode中你可以 View > Navigators > Show Log Navigator 看到实际的构建输出。选择您想要了解更多信息的警告或错误,然后单击该行右侧的“行”图标以查看输出(包括类似的内容) warning: something something [-Wreason-why] - jemmons
另请注意,如果您想重新启用此检查(并且您应该),则可以将其包装起来 #pragma clang diagnostic push 和 #pragma clang diagnostic pop - jemmons


引自Chris Lattner先生的用户手册:

在下面的示例中,-Wmultichar仅在一行代码中被忽略,之后诊断将返回到先前存在的任何状态。

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"
char b = 'df'; // no warning.
#pragma clang diagnostic pop

但更重要的是,考虑“掩码”变量的类型以及“掩码”代表什么并不是更为谨慎?

因为你做的是取决于long的大小是否为8,它是否应该是uint64_t类型?

如果sizeof(long)实际上是16而不是8或4(我猜你预计它不是8时)怎么办?那么0x7fffffff仍然是你需要的面具吗?或许你真的想从limits.h中分配LONG_MAX而不是当前的构造。


1
2018-05-07 21:24



OP明确表示他根本不想改变SQLite源。 - bdesham


clang用户手册在这里: http://clang.llvm.org/docs/UsersManual.html

它讨论了与诊断相关的各种主题。边栏中还有其他有用的文档 http://clang.llvm.org/


-1
2017-09-22 05:52