C++:警告:有符号和无符号表达式(Gmake,freebsd)
C++: warning: Signed and unsigned expression ( Gmake, freebsd )
我遇到一个小问题,希望你能帮助我。谢谢。
这是错误代码:
FILE.cpp: In member function 'bool DragonSoulTable::ReadAdditionalApplys()':
FILE.cpp:223: warning: comparison between signed and unsigned integer expressions
这是我放在pastebin上的代码,因为它太大了,不能放在论坛上FILE.CPP
转到第223行,您有:
for (int i = 0; i < m_vecDragonSoulNames.size(); i++)
如您所见,i
的类型为int
,但m_vecDragonSoulNames.size()
是否返回int
??
事实上,在代码中有很多类似这样的比较。
当比较有符号类型和无符号类型时,编译器会发出警告(而不是错误),这是因为这些类型的范围不同。这是有充分理由的,如果你不小心,结果可能会令人惊讶。。。
如果您知道进行这样的比较是安全的,那么您可以显式地将其中一个值强制转换为与另一个值相同的类型,并且警告将消失。
类似于:
unsigned int a = someUnisgnedValue;
int b = someSignedValue;
if ((unsigned) b < a)
//... do something
或者,您可以同时使用同一类型的。例如,在代码的第223行中,您可以执行以下操作:
for (unsigned int i = 0; i < m_vecDragonSoulNames.size(); i++)
请检查另一个问题:什么时候使用无符号值而不是有符号值?
正是警告所说的内容。您正在比较有符号整数和无符号整数。例如:
uint NUM = 5;
for (int i=0; i < NUM; i++) // Here you compare int and uint
解决方案是
- 使所有变量的类型相同
- 无视警告
- 抑制它
- 使用较低的错误报告级别进行编译,因此根本不生成它
在循环中,i是整数,其中m_vecDragonsSoulNames.size()的类型为无符号整数。使i无符号int
相关文章:
- C 不同的线程在FreeBSD 10上具有相同的线程ID
- 为什么 CLion 在 FreeBSD 上无限期地挂"Building..."?
- 为 freebsd 11 编译 gcc4.8.5 时出错: 错误: 未知类型名称 'choke'
- libstdc++ 系统库在 OpenBSD 和 FreeBSD 上没有剥离
- freebsd gmake lib错误:未定义的引用
- f freeBSD上的r羽毛包装编译错误(G )
- Gmake正在隐式上删除Solaris 10的某些文件
- 在FreeBSD下,允许32位应用程序使用超过4GB的RAM
- 使用 Gnu 多精度库C++时出现 gmake 错误
- 检索FreeBSD系统中进程的内存使用情况
- G++ (FreeBSD) 错误: '{'令牌之前预期的主表达式
- 正在尝试在x64 FreeBSD上编译DevIL
- G++如何在linux服务器上为FreeBSD编译
- Makemkv for Freebsd
- G++ 包含 FreeBSD 上的路径
- X64和x32 FreeBSD,内存位置介绍应用程序
- 在 FreeBSD 上构建 Zetacoin:对 'Shutdown() 的未定义引用
- 在 FreeBSD 上构建 lixml++ 示例时对 glib 的未定义引用
- C++:警告:有符号和无符号表达式(Gmake,freebsd)
- C++NOW:有符号和无符号整数表达式(Freebsd、GCC、Gmake)之间的比较