首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-09-03 
(无符号数0)引起的警告头文件#define FOO 0c文件void f(unsigned int n){if (n FOO){dosomething()}

(无符号数>=0)引起的警告
头文件
#define FOO 0

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

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

我用的编译器是ARM的realview

谢谢了。

[解决办法]
利用短路
if (!FOO || n >= FOO)
{
dosomething();
}


[解决办法]

探讨

利用短路
if (!FOO || n >= FOO)
{
dosomething();
}

[解决办法]
最好还是修改void f(unsigned int n)的原型为void f(int n)
因为在#define FOO 0 时,FOO的类型默认是int的
[解决办法]
C/C++ code
void f(unsigned int n){    if (n > FOO || n == FOO)    {        dosomething();    }}
[解决办法]
探讨
最好还是修改void f(unsigned int n)的原型为void f(int n)
因为在#define FOO 0 时,FOO的类型默认是int的

[解决办法]
#define FOO 0
改成
const unsigned int F00 = 0;
试试
[解决办法]
探讨
#define FOO 0
改成
const unsigned int F00 = 0;
试试

[解决办法]
关闭 这个 警告
[解决办法]
关闭 这个 警告
[解决办法]
无符号数 恒大于或等于0 无符号数 最小是0 
这个比较没有意义 你仔细想想你在做什么
[解决办法]
《C专家编程》说过,除非确实有必要,否则不要用unsigned,尤其是该变量理论上不应该存在负数时(例如年龄)不要用unsigned,中文版P24
[解决办法]
#if foo == 0
dosomething();
#else
if (n >= FOO)
{
dosomething();
}
#endif

也许这样可以 大概把 试试
[解决办法]
感觉10楼说的挺好。。。
[解决办法]
你们老板有问题。
[解决办法]
if ((signed int)n >= FOO)

[解决办法]
(n-FOO>=0)
[解决办法]
条件编译嘛
C/C++ code
#define FOO     0void f(unsigned int n){#if (FOO > 0)        if (n >= FOO)#endif        {                n++;        }} 

热点排行
Bad Request.