gpt4 book ai didi

xcode - 用Xcode比较不同符号警告的整数

转载 作者:行者123 更新时间:2023-12-04 13:00:53 27 4
gpt4 key购买 nike

我使用开源来构建我的项目。当我添加 EGOTextView对于该项目,它具有以下语义问题:


Comparison of integers of different signs: 'int' and 'NSUInteger' (aka 'unsigned long')
Comparison of integers of different signs: 'NSInteger' (aka 'long') and 'NSUInteger' (aka 'unsigned long')

例如在源代码中:

for (int i = 0; i < lines.count; i++)//lines is an array

我注意到该项目具有构建配置文件,其中包括:

//使 CG 和 NS 几何类型相同。大多数情况下在 iPhone 上无关紧要,但这也使得 NSInteger 类型始终基于“long”进行定义,从而避免了 clang + llvm 2.7 关于 printf 格式检查的冲突警告

OTHER_CFLAGS = $(value) -DNS_BUILD_32_LIKE_64

根据评论,我想它会导致问题。
但是,我不知道此 OTHER_CFLAGS 的含义环境。而且我也不知道如何修复它以避免语义问题。

任何人都可以帮助我吗?

谢谢!

最佳答案

实际上,我认为关闭编译器警告不是正确的解决方案,因为比较 int和一个 unsigned long引入了一个微妙的错误。

例如:

unsigned int a = UINT_MAX; // 0xFFFFFFFFU == 4,294,967,295 
signed int b = a; // 0xFFFFFFFF == -1

for (int i = 0; i < b; ++i)
{
// the loop will have zero iterations because i < b is always false!
}

基本上,如果您只是简单地(隐式或显式地)抛弃 unsigned intint如果您的 unsigned int 的值不正确,您的代码将不正确大于 INT_MAX。

正确的解决方法是投 signed intunsigned int并且还要比较 signed int为零,涵盖它为负的情况:
unsigned int a = UINT_MAX; // 0xFFFFFFFFU == 4,294,967,295 

for (int i = 0; i < 0 || (unsigned)i < a; ++i)
{
// The loop will have UINT_MAX iterations
}

关于xcode - 用Xcode比较不同符号警告的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8350971/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com