![]() |
1
24
哦,它有。但反过来说。 忽略 有一天那个警告使我头疼。我在写一个函数,它绘制了一个图表,混合了有符号和无符号变量。在一个地方,我比较了一个负数和一个无符号数:
猜猜怎么回事?签名号码被提升为无符号类型,因此 更大的 最后,即使最初低于0。我花了几个小时才找到那个虫子。 |
![]() |
2
30
不要忽略编译器警告。 |
![]() |
3
4
如果你不得不问这个问题,你不知道禁用它是否安全,所以答案是否定的。 我不会禁用它-我不认为我总是比编译器更了解它(不仅仅是因为我经常不知道),更重要的是,我有时会因为编译器不知道而犯错误。 |
![]() |
4
3
你
应该
改变
警告是要捕获带负值的有符号整数与无符号整数之间的比较——如果两个数字的大小都很小,则前者(错误地)将被视为大于后者。 |
![]() |
5
2
二进制运算符通常在进行比较之前将两种类型转换为相同的类型,因为其中一种类型是无符号的,所以它还将把int转换为无符号的。通常这不会造成太多的麻烦,但如果您的in t是负数,这将导致比较中的错误。 例如,当从有符号转换为无符号时,-1等于4294967295,现在将其与100(无符号)进行比较。 |
![]() |
6
2
警告是有目的的…它们会让你仔细考虑你的代码! 就我个人而言,如果可能的话,我总是显式地强制转换已签名的——>未签名和未签名——>已签名。通过这样做,您就可以确保获得交易的所有权,并知道将要发生什么。我意识到,这可能并不总是可能的,这取决于项目来做这件事,但总是针对0编译器警告…它只能起作用! |
![]() |
7
0
我写代码的时间比我想承认的要长。从个人经验来看,忽略看似学究的编译器警告有时会产生非常不愉快的结果。 如果他们打扰了你,而你接受/理解了这种情况,那么就设置一个演员表,然后继续。 最终,在设计新代码时,这些东西从一个被忽视的细微差别变成了一个有意识的决定。这样一来,Mickmouse Corner的案例就没有足够的空间破坏您或您的客户日,并且总体上质量更好的软件。 |
![]() |
8
0
我甚至配置了编译器使该警告成为编译错误。因为其他人都提到过的原因。 如果我遇到有符号/无符号不匹配,我会问自己为什么选择不同的“有符号性”。通常是设计错误。 |
![]() |
9
0
@给我解释一下在你的链接后面找到的整条腿,这对这个问题真的很好。
当您在不同类型之间转换时,如果不检查那些可能会对您造成伤害的值,则始终是这样。 Johan 更新:从uint转换为int的正确方法是检查 不受限制的值。h,或类似的值。 (但我很少这样做,即使是你,我知道我应该……-) |
![]() |
10
0
我认为最好把你的无符号数转换成有符号数(在比较之前)。 而不是相反。 |
![]() |
11
-1
只是其中一种 C 允许你 shoot yourself in the foot -你最好知道你在做什么。这个 C 报价归属于 Bjarne Stroustrup 创造者 C++ . |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 3 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 4 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 4 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 4 月前 |