2

有人告诉我,字符比较if(c>='a' && c<='z')不可移植。

例子

int main() {
    char c;
    scanf("%c", &c);
    if(c>='a' && c<='z')
        printf("lower case\n");
}

有任何证据证明 char 比较if(c>='a' && c<='z')不可移植吗?

4

2 回答 2

10

C 标准不保证在执行字符集之间'a'和中只出现小写字母。'z'

在 EBCDIC 编码中, 和 之间还有其他字符'a''z'一些 C 实现使用 EBCDIC。

C标准确实保证数字是连续的,所以'0' <= d && d <= '9'测试是否d是十进制数字字符。

于 2013-05-06T13:42:11.710 回答
1

有任何证据证明 char 比较 if(c>='a' && c<='z')) 不可移植?

c = '~';

if  (c>='a' && c<='z'))
{
   printf("Yes\n");
}

将在 IBM 的 AS/400 中打印Yes,因为在 EBCDIC 中,编码~介于a和之间z

于 2013-05-06T13:57:48.073 回答