(无符号数>=零)引起的警告
(无符号数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();
}
[解决办法]
[解决办法]最好还是修改void f(unsigned int n)的原型为void f(int n)
因为在#define FOO 0 时,FOO的类型默认是int的
[解决办法]C/C++ codevoid f(unsigned int n){ if (n > FOO || n == FOO) { dosomething(); }}
[解决办法]
[解决办法]
#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++; }}