我收到警告:
Pe186"无符号int与零的无意义比较"
当我尝试编译以下代码时:
for(clLoop = cpLoopStart; clLoop >= 0; clLoop--)
{
//Do something
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么.我能理解,如果我正在寻找一个小于零的值,因为一个unsigned int永远不会是负面的.但是,所有我在这里寻找是,如果它是等于为零,其中unsigned int当然也可以.
我甚至可以看到这个错误,如果在这个循环中我试图预先减少而不是后减量,但是情况并非如此.
虽然,我确实将函数原型定义为具有size_t无符号类型的类型.我发现我仍然可以将负数传递给函数,但输出将是一个大的有符号十进制数.我问这个的原因是因为我想验证一个已知数组容量的数组索引.
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
void print(size_t i)
{
printf("%zu\n", i);
}
int main()
{
print(-1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
18446744073709551615
是否可以验证size_t i变量是否大于0?如果是这样我怎么能这样做?gcc不喜欢我检查i >= 0因为它说i永远不会小于零.
编辑:
有待进一步说明.想象一下,您必须验证,而不是将任意小数传递给函数以获取索引i处的元素.我想确保传入的索引在边界内.边界是:[0,N)