(无符号数>=0)引起的警告

bluejays 2012-08-16 10:10:39
头文件
#define FOO 0

c文件
void f(unsigned int n)
{
if (n >= FOO)
{
dosomething();
}

按照程序的逻辑,不管FOO的定义是0还是1还是多少,都是要做这个比较的。
编译器给了个警告,认为无符号数和0比较没有任何意义。
老板不允许有任何警告,但是我又不想把这个比较去掉,因为万一哪天有人改了头文件,比如#define FOO 10,那就又需要加这个比较了,但是很可能就想不起来。
有没有两全其美的好办法?

我用的编译器是ARM的realview

谢谢了。
...全文
832 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluejays 2012-08-19
  • 打赏
  • 举报
回复
谢谢同学们。
好办法很多阿,而且好像也不太难。不过我的思路有点不太灵活,碰到类似这种有点像脑筋急转弯的问题就转不过来,嘿嘿
yimingxinshou 2012-08-16
  • 打赏
  • 举报
回复
感觉10楼说的挺好。。。
lin51616780 2012-08-16
  • 打赏
  • 举报
回复
#if foo == 0
dosomething();
#else
if (n >= FOO)
{
dosomething();
}
#endif

也许这样可以 大概把 试试
hitcser01 2012-08-16
  • 打赏
  • 举报
回复
《C专家编程》说过,除非确实有必要,否则不要用unsigned,尤其是该变量理论上不应该存在负数时(例如年龄)不要用unsigned,中文版P24
lin51616780 2012-08-16
  • 打赏
  • 举报
回复
无符号数 恒大于或等于0 无符号数 最小是0
这个比较没有意义 你仔细想想你在做什么
AnYidan 2012-08-16
  • 打赏
  • 举报
回复
关闭 这个 警告
AnYidan 2012-08-16
  • 打赏
  • 举报
回复
关闭 这个 警告
Code_Talk 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
#define FOO 0
改成
const unsigned int F00 = 0;
试试
[/Quote]
这样可以啊。
冻结 2012-08-16
  • 打赏
  • 举报
回复
#define FOO 0
改成
const unsigned int F00 = 0;
试试
hello_world000 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
最好还是修改void f(unsigned int n)的原型为void f(int n)
因为在#define FOO 0 时,FOO的类型默认是int的
[/Quote]
我想说的是,万一FOO定义为一个负数,判断的时候就会出问题的
hello_world000 2012-08-16
  • 打赏
  • 举报
回复

void f(unsigned int n)
{
if (n > FOO || n == FOO)
{
dosomething();
}
}

改成这样也好傻啊
hello_world000 2012-08-16
  • 打赏
  • 举报
回复
最好还是修改void f(unsigned int n)的原型为void f(int n)
因为在#define FOO 0 时,FOO的类型默认是int的
nice_cxf 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

利用短路
if (!FOO || n >= FOO)
{
dosomething();
}
[/Quote]
大概没用,还会警告
最简单的就是加个临时变量:
void f(unsigned int n)
{
unsigned int tmp=0;
if (n >= (FOO+tmp))
{
dosomething();
}
不过代码看起来很傻
aozhi 2012-08-16
  • 打赏
  • 举报
回复
利用短路
if (!FOO || n >= FOO)
{
dosomething();
}

mymtom 2012-08-16
  • 打赏
  • 举报
回复
条件编译嘛

#define FOO 0

void f(unsigned int n)
{
#if (FOO > 0)
if (n >= FOO)
#endif
{
n++;
}
}
Joseph-Growth 2012-08-16
  • 打赏
  • 举报
回复
(n-FOO>=0)
赵4老师 2012-08-16
  • 打赏
  • 举报
回复
if ((signed int)n >= FOO)
proorck6 2012-08-16
  • 打赏
  • 举报
回复
你们老板有问题。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧