我已经将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
“文档”。
任何远程版本的clang应该打印与给定警告相关联的标志以及警告(在这种情况下为-Wconstant-conversion);不知道为什么你没有看到这个。关闭它,你可以使用 #pragma clang diagnostic ignored "-Wconstant-conversion"
。
任何远程版本的clang应该打印与给定警告相关联的标志以及警告(在这种情况下为-Wconstant-conversion);不知道为什么你没有看到这个。关闭它,你可以使用 #pragma clang diagnostic ignored "-Wconstant-conversion"
。
引自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而不是当前的构造。