谁决定了角色的排序

Kar*_*uru 9 c operating-system char

我有一个基于以下程序的查询 -

char ch;
ch = 'z';
while(ch >= 'a')
{
    printf("char is  %c and the value is %d\n", ch, ch);
    ch = ch-1;
}
Run Code Online (Sandbox Code Playgroud)

为什么在上述程序中不保证打印整套小写字母.如果C对内部形式的字符排序没有多少保证,那么实际上是谁以及如何做?

pax*_*blo 17

编译器实现者选择其基础字符集.关于标准唯一要说的是必须有一定数量的字符,并且数字字符是连续的.

用于C99的执行环境所要求的字符是A通过Z,a通过z,0通过9(必须是在一起并且按顺序),任何的!"#%&'()*+,-./:;<=>?[\]^_{|}~,空间,水平制表符,垂直制表,换页,警报,退格,回车和换行.这在当前的C1x草案中保持不变,这是该标准的下一次迭代.

其他一切都取决于实施.

例如,代码如:

int isUpperAlpha(char c) {
    return (c >= 'A') && (c <= 'Z');
}
Run Code Online (Sandbox Code Playgroud)

将在使用EBCDIC的主机上中断,将大写字符分成两个区域.

真正可移植的代码将考虑到这一点.所有其他代码应记录其依赖项.

您的示例的更便携式实现将类似于:

static char chrs[] = "zyxwvutsrqponmlkjihgfedcba";
char *pCh = chrs;
while (*pCh != 0) {
    printf ("char is %c and the value is %d\n", *pCh, *pCh);
    pCh++;
}
Run Code Online (Sandbox Code Playgroud)

如果你想要一个真正的可移植解决方案,你可能应该使用,islower()因为只检查拉丁字符的代码将无法移植到(例如)希腊语,使用Unicode作为其基础字符集.