ISO/IEC 9899:2011 条款5——5.2.1 字符集
5.2.1 字符集
1、两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集)。每个集合此外被划分为一个基本字符集,其内容由本子条款给出,以及一组零个或多个区域特定的成员(这些不是基本字符集的成员),称为扩展字符。这些成员结合起来也被称为扩展字符集。执行字符集的成员的值是由实现定义的。
2、在一个字符常量或字符串字面量中,执行字符集的成员应该由相应的源字符集的成员或通过由倒斜杠\后面跟一到多个字符所构成的转义序列来表示。所以比特均为0的一个字节称为空字符(null character),应该存在于基本执行字符集中;它被用于终止一个字符串。
3、基本源和基本执行字符集应该具有如下成员:拉丁字目表的26个大写字母,
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
拉丁字母表的26个小写字母,
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
10个十进制数字,
0 1 2 3 4 5 6 7 8 9
29个图形字符,
! " # % & ' ( ) * + , - . / :
; < = > ? [ \ ] ^ _ { | } ~
空白符,以及表示水平制表、垂直制表和换页的控制字符。源与执行基本字符集的每个成员应该适应在一个字节中。在源和执行字符集中,每个跟在上述十进制数字列表中的0之后的字符应该是一个大于在其之前字符的值。在源文件中,应该有某个方法来指示文本的每一行的结束;本国际标准将这种行结束指示符对待为就好比它是一单个换行字符。在基本执行字符集中,应该要有代表警告、回退、回车、以及换行的控制字符。如果在一个源文件中碰到了任一其它字符(除了在一个标识符、字符常量、字符串字面量、头文件名、注释,或是从不会被转换为一个符记的预处理符记中),那么行为是未定义的。
4、一个字母是上述所定义的一个大写字母或一个小写字母;在本国际标准中,此术语并不包括其它字母表中作为字母的字符[译者注:比如希腊字母αβγ]。
5、通用字符名构建提供了命名其它字符的方法。
5.2.1.1 三字符序列
1、在任一其它处理发生之前,以下三个字符的序列(称为三字符序列[注:三字符序列允许没有定义在ISO/IEC 646中所描述的不变编码集中的字符的输入,ISO/IEC 646是7比特US ASCII码集的一个子集。])每次出现时,都用相应的单个字符来代替。
??= 对应于 # ??) 对应于 ] ??! 对应于 |
??( 对应于 [ ??' 对应于 ^ ??> 对应于 }
??/ 对应于 \ ??< 对应于 { ??- 对应于 ~
没有其它的三字符序列存在。不作为上述所列出的三字符中的其中之一开头的每个?不会进行转义。
2、例1
??=define arraycheck(a, b) a??(b??) ??!??! b??(a??)
// 变为
#define arraycheck(a, b) a[b] || b[a]
3、例2 以下代码行
printf("Eh???/n");
// 变为
printf("Eh?\n");
5.2.1.2 多字节字符
1、源字符集可以包含多字节字符,用于表示扩展字符集的成员。执行字符集也可以包含多字节字符,它们不需要具有与源字符集相同的编码。对于执行字符集与源字符集,应该要保持以下规则:
——基本字符集应该被呈现出来,并且每个字符应该被编码为一单个字节。
——该呈现意味着,任一额外的成员的表示是区域特定的。
——一个多字节字符集可以具有一个依赖状态的编码,其中,多字节字符的每个序列以一个初始档位状态开始,并进入其它区域特定的档位状态,当在此序列中遇到特定的多字节字符时。在初始档位状态时,所有单字节字符仍然保留对它们通常的解释并且不切换档位状态。对该序列中后续字节的解释是当前档位状态的一个函数。
2、对于源文件,应该保持以下规则:
——一个标识符、注释、字符串字面量、字符常量,或头文件名应该在初始档位状态开始和结束。
——一个标识符、注释、字符串字面量、字符常量,或头文件名应该由一序列有效的多字节字符构成。
ISO/IEC 9899:2011 条款5——5.2.1 字符集的更多相关文章
- ISO/IEC 9899:2011 条款3——术语、定义与符号
3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用. ...
- ISO/IEC 9899:2011 条款6.4.2——标识符
6.4.2 标识符 6.4.2.1 通用 语法 1.identifier: identifier-nodigit identifier identifier-nondigit identifie ...
- ISO/IEC 9899:2011 条款6.4.3——通用字符名
6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad ...
- ISO/IEC 9899:2011 条款5——5.1.2 执行环境
5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...
- ISO/IEC 9899:2011 条款4——标准顺从
4. 标准顺从 1.在本国际标准中,“应该”被解释为对一个实现或一个程序的要求:相反地,“不该”被解释为禁用. 2.如果违反了出现在一个强制规定或运行时强制规定之外的“应该”或“不该”要求,那么该行为 ...
- ISO/IEC 9899:2011 条款6——语言
6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...
- ISO/IEC 9899:2011 条款6.3——转换
6.3 转换 1.有些操作符将操作数的值自动地从一种类型转换为另一种.本子条款指定了从这么一个隐式转换所要求的结果,以及从一个投射操作(一个显式转换)所要求的结果.在6.3.1.8中所列出的信息概括了 ...
- ISO/IEC 9899:2011 条款6.5——表达式
6.5 表达式 1.一个表达式是操作符与操作数的一个序列,这些操作符与操作数指定了一个值的计算,或指派一个对象或一个函数,或是生成副作用,或执行上述操作的组合.对一个操作符的操作数的值计算顺序排在对该 ...
- ISO/IEC 9899:2011 条款6.8.6——跳转语句
6.8.6 跳转语句 语法 1.jump-statement: goto identifier ; continue ; break ; return expressio ...
随机推荐
- DNS服务——域名解析委派
域名解析委派 域名解析委派和DNS域名解析递归查询很像,举个例子解释域名解析委派 ①假设在.net域名下有台计算机想要访问www.cac.com. ②.net这台DNS服务器不知道www.cac.co ...
- Usages for IntelliJ & Eclipse
IntelliJ ⌘E Select a recently opened file from the list. ⌘/ (left command + /)⌥⌘/ (right command + / ...
- Spring Boot配置多数据源并实现Druid自动切换
原文:https://blog.csdn.net/acquaintanceship/article/details/75350653 Spring Boot配置多数据源配置yml文件主数据源配置从数据 ...
- Ansible批量自动化管理工具
一,工具与环境介绍 1.1 ansible简介 批量管理服务器的工具 无需部署agent,通过ssh进行管理 流行的自动化运维工具:https://github.com/ansible/ansible ...
- 开源框架---tensorflow c++ API中./configure步骤细节
u@u160406:~/tf1.13/tensorflow$ git checkout r1.13 分支 r1.13 设置为跟踪来自 origin 的远程分支 r1.13.切换到一个新分支 'r1.1 ...
- Educational Codeforces Round 72 (Rated for Div. 2)-D. Coloring Edges-拓扑排序
Educational Codeforces Round 72 (Rated for Div. 2)-D. Coloring Edges-拓扑排序 [Problem Description] 给你 ...
- python高级特性-sorted()
1.数字排序 >>> sorted([1,-12,13,-4],key=abs) [1, -4, -12, 13] 2.字符串排序 按ASCII排序 默认情况下,对字符串排序,是按照 ...
- 从groupby 理解mapper-reducer
注,reduce之前已经shuff. mapper.py #!/usr/bin/env python """mapper.py""" imp ...
- npm的安装,升级与卸载
npm查询版本 npm -v npm安装模块 [npm install xxx]利用 npm 安装xxx模块到当前命令行所在目录: [npm install -g xxx]利用npm安装全局模块xxx ...
- 自定义的JSP标签
JSP标签 JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. 除了这 ...