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 ...
随机推荐
- 应用在Windows系统中的自动化部署实践
因为公司的产品有linux 和windows两套部署环境,领导安排我先来做windows的自动化部署.由于本人对windows 的dos命令基本没啥概念,所以在最终完成之前,走了很多弯路,在这里记载下 ...
- SpringCloud之Eureka
[前面的话]SpringCloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它配置简单,上手快,而且生态成 ...
- web上常见的攻击方式及简单的防御方法
SQL注入最常见的攻击方式,所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大 ...
- Robot Framework--变量
Robot Framework的变量分为标量, 列表和字典, 分别使用语法格式 ${SCALAR}, @{LIST} 和 &{DICT} 来定义. 此外, 环境变量可以直接使用语法 %{ENV ...
- vue 组件高级用法(递归组件,内联模板,动态组件,异步组件)
- 【安卓基础】ViewPager2的入门使用
之前的项目中使用过ViewPager,被坑过几次.如果你在RecyclerView中的Item使用ViewPager,你绝对会产生莫名其妙的问题,因为ViewPager在同一界面上不能有两个一样的ID ...
- 一、RabbitMQ 基础理解
RabbitMQ,是一个使用 erlang 编写的 AMQP(高级消息队列协议)的服务实现,简单来说,就是一个功能强大的消息队列服务 概念理解: Producer: 消息发送者 RabbitMQ Vh ...
- eclipse和scala整合,打包配置文件及打包步骤
我写的是maven项目,pom文件为: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...
- 14 | count(*)这么慢,我该怎么办?
在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数.这时候你可能会想,一条select count(*) from t 语句不就解决了吗? 但是,你会发现随着系统中记 ...
- 怎样运行jar包中的文件
1. 2.编辑sysmodule.cmd文件 java -cp sysmodule.jar;classes12.jar;mysql-connector-java-5.0.3-bin.jar;jbcl. ...