在C ++编程语言6.2.3中,它说:
可以安全地假设实现字符集包括 十进制数字,英文的26个字母字符,以及一些 基本标点字符。假设是不安全的 的是:
8位字符集中不超过127个字符(例如,某些集合提供255个字符)。
没有比英语提供的字母字符更多(大多数欧洲人 语言提供更多,例如æ,þ和ß)。
字母字符是连续的(EBCDIC在'i'和'j'之间留下间隙。)
用于编写C ++的每个字符都可用(例如, 某些国家字符集不提供{,},[,],|和 \)。
一个字符符合1个字节。有嵌入式处理器 没有字节访问char为4字节的硬件。还有,一个 可以合理地使用16位Unicode编码作为基本字符。
我不确定我理解最后两个陈述。
在标准的第2.3节中,它说:
基本源字符集由96个字符组成:空格 字符,表示水平制表符的控制字符, 垂直制表符,换页符和换行符,以及以下91个图形 字符:
a b c d e f g h i j k l m n o p q r s t u v w y y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9
_ {} []#()< > %:; 。 ? * + - / ^& | ! =,\“'
... ...基本执行字符集和基本执行宽字符集应各自包含基本的所有成员 源字符集,加上代表警报的控制字符, 退格和回车,加上一个空字符(分别为 null宽字符),其表示具有全零位。
我们可以看到标准中说明了像{} [] |这样的字符\是基本执行字符集的一部分。那么为什么TC ++ PL认为假设这些字符在实现的字符集中可用是不安全的呢?
对于char的大小,在标准的第5.3.3节中:
sizeof运算符产生对象中的字节数 表示其操作数。 ......
sizeof(char)
,sizeof(signed char)
和sizeof(unsigned char)
为1。
我们可以看到标准声明char是1个字节。 TC ++ PL试图在这里做点是什么意思?
答案 0 :(得分:1)
“byte”这个词似乎在第一句话中用得很粗俗。就C ++而言,一个字节始终是一个字符,但它保存的位数取决于平台(在CHAR_BITS
中可用)。有时您想说“一个字节是八位”,在这种情况下,您会得到不同的含义,这可能是短语“char有四个字节”中的预期含义。
执行字符集可能大于环境提供的输入字符集或与之不兼容。存在Trigraph和备用令牌以允许在这样的受限平台上表示具有较少输入字符的执行集字符(例如not
对于!
的所有目的是相同的,并且后者不是所有字符都可用套装或键盘布局)。
答案 1 :(得分:1)
过去,某些国家的ASCII变体(例如斯堪的纳维亚语言)使用重音字母字符代码点,其中US ASCII具有标点符号,例如[
,]
,{ {1}},{
。这就是C89包含三字符的原因 - 它们允许代码写在ISO 646的'不变子集'中。请参阅维基百科页面上的国家变体中使用的字符图表。
例如,斯堪的纳维亚的某些人可能必须阅读:
}
而不是:
#include <stdio.h>
int main(int argc, char **argv)
Å
for (int i = 1; i < argc; i++)
printf("%s\n", argvÆiØ);
return 0;
ø
使用三字母,你可以写:
#include <stdio.h>
int main(int argc, char **argv)
{
for (int i = 1; i < argc; i++)
printf("%s\n", argv[i]);
return 0;
}
在任何语言中同样可怕。
我不确定这仍然存在多少问题,但这就是为什么评论都在那里。