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

D0n*_*0nK -3 c comparison unsigned warnings for-loop

for ( i= 0; i < sizeof(r)/sizeof(r[0]); ++i ){ 
        r[i]= 0; 
}
Run Code Online (Sandbox Code Playgroud)

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

comparison between signed and unsigned integer expressions [-Wsign-compare]
Run Code Online (Sandbox Code Playgroud)

chu*_*ica 6

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

size_t i;
for (i = 0; i < sizeof(r)/sizeof(r[0]); ++i) { 
  r[i] = 0; 
}
Run Code Online (Sandbox Code Playgroud)

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

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