for ( i= 0; i < sizeof(r)/sizeof(r[0]); ++i ){
r[i]= 0;
}
所以这是for循环我遇到了麻烦,我怎么能重写它所以我没有得到警告:
comparison between signed and unsigned integer expressions [-Wsign-compare]
答案 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;
}
运行您的代码,它肯定会删除此警告。