Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Llvm 控制叮当声警告_Llvm_Clang - Fatal编程技术网

Llvm 控制叮当声警告

Llvm 控制叮当声警告,llvm,clang,Llvm,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] 我已经启用了-fdi

我已经将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
来显示名称(
警告\u impcast\u整数\u精度\u常量

我当然不想更改SQLite源代码中的任何内容,因为我不想引入不可预见的副作用,所以我只想为这一行禁用此特定警告。该警告当然有效,但在
sizeof
检查到位的情况下,无论如何都不会出现


为了使此过程可用于其他警告和诊断,是否有一种方法可以找出特定的警告级别并对一条线路禁用它们?不幸的是,我在所谓的
clang/llvm
文档中找不到任何内容。

任何远程最新版本的clang都应该打印与给定警告相关联的标志以及警告(在本例中为-Wconstant conversion);不知道你为什么看不到这一点。要关闭它,您可以使用
#pragma clang diagnostic ignored“-Wconstant conversion”

clang用户手册如下:


它讨论与诊断相关的各种主题。在

的侧栏中还有其他有用的文档,引用自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时,你会期望它是4),会怎么样?0x7fffffff仍然是您需要的掩码吗?或者,您可能真的想从limits.h而不是当前结构中分配LONG_MAX。

您在哪里看到
常量转换
?除了警告文本,Xcode没有显示任何内容。哦。。。Xcode对clang的输出进行了一系列操作;我不确定它是做什么的。在Xcode中,您可以
查看>导航器>显示日志导航器
来查看实际的生成输出。选择需要更多信息的警告或错误,然后单击该行右侧的“行”图标以查看输出(包括类似于
警告:某物[-reason why]
还请注意,如果要重新启用此检查(您应该这样做)您可以用
#pragma-clang-diagnostic-push
#pragma-clang-diagnostic-pop
OP明确表示他根本不想更改SQLite源代码。