C89:有符号/无符号不匹配

2024-04-15

有符号/无符号不匹配一定是不好的吗?

这是我的程序:

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(使用前将#替换为@)

C89:有符号/无符号不匹配 的相关文章

随机推荐