| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1495 人关注过本帖
标题:一个把我蹂躏的死去活来的警告
只看楼主 加入收藏
liqingyulipeng
Rank: 1
等 级:新手上路
帖 子:63
专家分:3
注 册:2008-10-11
结帖率:77.78%
收藏
 问题点数:0 回复次数:18 
一个把我蹂躏的死去活来的警告
if ((a+1) >= b)
{
    return;
}
其中两个变量的定义如下:
unsigned short a;
unsigned short b;
问题:
当编译器在编译if ((a+1) >= b)这条语句的时候,会给出如下警告:
Old-style K&R C would produce possibly different results for relational.
Use explicit cast.

请问是为什么?怎样修改才能消除这个警告?
搜索更多相关主题的帖子: 死去活来 蹂躏 警告 
2009-07-16 16:03
冷夜冰风
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2009-1-17
收藏
得分:0 
return后怎么没有变量!
2009-07-16 16:09
printc
Rank: 2
来 自:坎坷之路
等 级:论坛游民
帖 子:162
专家分:84
注 册:2009-6-12
收藏
得分:0 
return后面怎么没东西?

把整段程序贴上来嘛

人生之路,坎坷颇多……
2009-07-16 16:19
rffei
Rank: 1
等 级:新手上路
帖 子:2
专家分:7
注 册:2009-7-14
收藏
得分:0 
a和b有没有赋值?
2009-07-16 18:27
tjp1984
Rank: 2
来 自:河南
等 级:论坛游民
帖 子:137
专家分:39
注 册:2009-5-13
收藏
得分:0 
没变量表示程序终止,退出

粗体文字 憨豆先生[/b]
2009-07-16 23:50
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1687
专家分:4253
注 册:2007-12-27
收藏
得分:0 
if ((a+(unsigned short)1) >= b)
{
    return;
}

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2009-07-17 01:04
流浪人
Rank: 1
等 级:新手上路
帖 子:17
专家分:1
注 册:2009-7-6
收藏
得分:0 
你应该把整个程序贴出来
2009-07-17 02:20
liqingyulipeng
Rank: 1
等 级:新手上路
帖 子:63
专家分:3
注 册:2008-10-11
收藏
得分:0 
谢谢各位的热心,我已经找到原因了。
6楼的朋友的回答很接近,但是不对。
这个警告产生的原因是因为数据类型不匹配。常量在计算机中的默认存储类型是int型,而变量a和b的类型是unsigned short。当这两种不同类型的数据通过一个双目运算符进行运算时,编译器要先将其转化为相同的类型。这种转化的过程在ANSI标准和旧的K&R中是不一样的,所以会产生如问题所示的警告。
6楼的朋友的修改意在把两种数据类型强制转换为同种类型,不过没注意到数据常量的类型是不能被修改的,所以我们只能够修改变量的类型。正确修改如下:
if (((int)a+1) >= (int)b)
{
    return;
}
这种结果看上去很别扭,但确实只有这种办法。

至于有的朋友说为什么return后面没有数值或变量,怀疑这里有问题。其实这里是没有问题的。因为这条if语句是位于一个void类型的函数中。void类型的函数没有返回值,故这里只有return。
2009-07-17 16:00
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
谁说的常量没法改变类型的?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("%d, %d\n", sizeof((short)1), sizeof(1));
    return 0;
}

这个程序在我的机器上运行的结果是2,4(Ubuntu9.04),这至少证明常量也是可以改变类型的。

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-07-17 17:55
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1687
专家分:4253
注 册:2007-12-27
收藏
得分:0 
这个道理不辩自明,因为连表达式都可以强制转换类型,那常量自然也不成问题。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2009-07-17 18:00
快速回复:一个把我蹂躏的死去活来的警告
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021327 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved