有符号和无符号整数表达式[-Wsign-compare]警告之间的比较

时间:2014-08-17 02:43:30

标签: c for-loop comparison warnings unsigned

for ( i= 0; i < sizeof(r)/sizeof(r[0]); ++i ){ 
        r[i]= 0; 
}

所以这是for循环我遇到了麻烦,我怎么能重写它所以我没有得到警告:

comparison between signed and unsigned integer expressions [-Wsign-compare]

2 个答案:

答案 0 :(得分:6)

sizeof()返回类型为size_t的无符号整数。所以使用相同类型的索引。

size_t i;
for (i = 0; i < sizeof(r)/sizeof(r[0]); ++i) { 
  r[i] = 0; 
}

建议使用int size = sizeof(r)/sizeof(r[0]);size_t的范围可能会大大超过int的正范围。然后,分配可能会丢失很多位。

size_t是最适合索引数组变量的类型。但请记住,因为它是一些无符号整数,所以它不能代表负索引。

答案 1 :(得分:2)

在您的代码中:

for ( i= 0; i < sizeof(r)/sizeof(r[0]); ++i ){ 
        r[i]= 0; 
}

我认为&#34;我&#34;声明为int,尝试&#34; unsigned int i; &#34;像这样:

for (unsigned int i = 0; i < sizeof(r)/sizeof(r[0]); ++i ){ 
        r[i]= 0; 
}

运行您的代码,它肯定会删除此警告。