有符号/无符号不匹配一定是不好的吗?
这是我的程序:
int main(int argc, char *argv[]) {
unsigned int i;
for (i = 1; i < argc; i++) { // signed/unsigned mismatch here
}
}
argc
已签署,i
不是。这是一个问题吗?
“有符号/无符号不匹配”可能很糟糕。在你的问题中,你问的是比较。当比较相同基类型的两个值(一个有符号,一个无符号)时,有符号值将转换为无符号值。所以,
int i = -1;
unsigned int j = 10;
if (i < j)
printf("1\n");
else
printf("2\n");
打印 2,而不是 1。这是因为i < j
, i
被转换为unsigned int
. (unsigned int)-1
等于UINT_MAX
,一个非常大的数字。因此,条件评估结果为 false,并且您得到else
clause.
对于你的具体例子,argc
保证为非负数,因此您不必担心“不匹配”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)