6.4.5 字符串字面量

语法

1、string-literal:

encoding-prefixopt    "  s-char-sequenceopt  "

encoding-prefix:

u8

u

U

L

s-char-sequence:

s-char:

s-char-sequence    s-char

s-char:

源字符集中的任一成员,除了双引号 " ,倒斜杠 \ ,或换行字符

escape-sequence

约束

2、毗邻的字符串字面量标记的一个序列不应该同时包括一个宽字符串字面量和一个UTF-8字符串字面量。

描述

3、一个字符串字面量是零个或多个多字节字符封闭在双引号中的一个序列,比如 "xyz" 。一个UTF-8字符串字面量同样如此,除了带有前缀u8。一个宽字符串字面量也同样如此,除了标有前缀LuU

4、同样的考虑应用于一个字符串字面量中的序列的每个元素,就好比它是一个整型字符常量(对于一个字符或UTF-8字符串字面量),或是一个宽字符常量(对于一个宽字符串字面量),除了单引号 ' 要么可以通过自身,要么通过转义序列 \' 来表示,但双引号 " 应该可以通过转义序列 \" 来表示。

语义

5、在翻译阶段6中,由任一毗邻的字符与相同前缀的字符串字面量标记序列所指定的多字节字符序列被拼接成一单个多字节字符序列。如果这些标记中的任何一个具有一个编码前缀,那么结果多字节字符序列被看作为具有相同的前缀;否则,它被看作为一个字符串字面量。不同前缀的宽字符串字面量标记是否可以被拼接,并且如果可以,如何看待结果多字节字符序列是实现定义的。

6、在翻译阶段7中,值为0的一个字节或ASCII码被添加到每个多字节字符序列的后面,形成一个字符串字面量或字面量。[注:一个字符串字面量不需要是一个字符串(见7.1.1),因为一个空字符可以通过一个 \0 转义序列被嵌入进去。]多字节字符序列然后被用于初始化一个静态存储周期的数组,并且长度恰好满足包含该序列。对于字符串字面量,数组元素具有类型char,并且以多字节字符序列的各个字节被初始化。对于UTF-8字符串字面量,数组元素具有类型char,并且以编码为UTF-8的多字节序列的字符被初始化。对于前缀为字母L的宽字符串字面量,数组元素具有类型wchar_t,并且以相应于多字节字符序列(通过mbstowcs函数所定义的,并具有实现定义的当前本地语言)的宽字符序列进行初始化。对于前缀为字母uU的宽字符串字面量,数组元素分别具有类型char16_tchar32_t,并且以相应于多字节字符序列(通过连续地调用mbrtoc16mbrtoc32函数,根据适当的类型,并带有实现定义的当前本地语言来定义)的宽字符序列来初始化。包含一个不在执行字符集中所表示的多字节字符或转义序列的一个字符串字面量的值是由实现定义的。

7、这些数组是否为单独提供具有适当值的它们的元素是未指定的。如果程序企图修改这样的一个数组,那么行为是未定义的。

8、例1  这对毗邻的字符串字面量 "\x12" "3" 产生一单个字符串字面量,包含两个字符,其值为 '\x12''3',因为转义序列恰在毗邻的字符串字面量拼接之前被转换为执行字符集的单个成员。

9、例2  下列毗邻的字符串字面量标记的每个序列

    "a"  "b"  L"c"

    "a"  L"b"  "c"

    L"a"  "b"  L"c"

    L"a"  L"b"  L"c"

是相互等价的字符串字面量——L"abc"

类似的,下列序列的每一个

    "a"  "b"  u"c"

    "a"  u"b"  "c"

    u"a"  "b"  u"c"

    u"a"  u"b"  u"c"

是相互等价的字符串字面量,等价于——u"abc"

ISO/IEC 9899:2011 条款6.4.5——字符串字面量的更多相关文章

  1. ISO/IEC 9899:2011 条款5——5.2.1 字符集

    5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出 ...

  2. ISO/IEC 9899:2011 条款6.4.3——通用字符名

    6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad ...

  3. ISO/IEC 9899:2011 条款6.7.9——初始化

    6.7.9 初始化 语法 1.initializer: assignment-expression {    initializer-list    } {    initializer-list   ...

  4. ISO/IEC 9899:2011 条款6.5.1——基本表达式

    6.5.1 基本表达式 语法 1.primary-expression: identifier constant string-literal (    expression    ) generic ...

  5. ISO/IEC 9899:2011 条款5——5.2.4 环境限制

    5.2.4 环境限制 1.翻译与执行环境都约束了语言翻译器和库的实现.下面概述了对一个顺应标准实现的语言相关的环境限制:库相关的限制在条款7中讨论. 5.2.4.1 翻译限制 1.实现应该能够翻译并执 ...

  6. ISO/IEC 9899:2011 条款3——术语、定义与符号

    3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用. ...

  7. ISO/IEC 9899:2011 条款6.4.2——标识符

    6.4.2 标识符 6.4.2.1 通用 语法 1.identifier: identifier-nodigit identifier    identifier-nondigit identifie ...

  8. ISO/IEC 9899:2011 条款6——语言

    6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...

  9. ISO/IEC 9899:2011 条款5——5.1.2 执行环境

    5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...

随机推荐

  1. 交付Dubbo微服务到kubernetes集群

    1.基础架构 1.1.架构图 Zookeeper是Dubbo微服务集群的注册中心 它的高可用机制和k8s的etcd集群一致 java编写,需要jdk环境 1.2.节点规划 主机名 角色 ip hdss ...

  2. python小知识点汇总

    一 写mysql 场景:自动化用例中需要构造数据,写入redis 表中已有该primary_key的记录,在现有基础上更新字段 表中无该记录,需要插入 # 请求传入table字段,db.table,c ...

  3. MyBatis_[tp_48]_动态sql_内置参数_parameter&_databaseId

    笔记要点-----内置参数_parameter&_databaseId      用处: 迅速切换数据库,执行一条多分支的sql语句即可;1.定义接口 public interface Emp ...

  4. tinylogin-1.4

    tinylogin-1.4是一个开发嵌入式的文件系统很好的一个工具

  5. Robot Framework--接口测试中常见的四种POST方式

    写接口测试用例时,遇到以json格式提交数据时,报错,Request如下图: Response如下图: 改成form格式提交,可以正常运行,如下图: 代码如下: ------------------- ...

  6. 加密与解密 Sytem.Security.CryptoGraphy

    一.Hash加密,使用HashAlgorithm哈希算法类的派生类 HashAlgorithm派生类包括: KeyedHashAlgorithm: 显示所有加密哈希算法实现均必须从中派生的抽象类. M ...

  7. shell 学习笔记 LinuxShell脚本攻略(第2版)

    注释用#号:多条命令通过分号或回车来分隔 echo会自动换行,若不想换行,则加上-n参数,如 echo -n "nice to meet you" echo后面的内容可以不带引号, ...

  8. 微信小程序学习记录(一)

    如何定义一个全局变量: 1,在根目录下app.js中添加 App({ globalData: { g_isPlayingMusic : false, g_currentMusicPostId :nul ...

  9. mongodb mongod.lock文件及oplog文件

    在mongodb的启动时,在数据目录下,会生成一个mongod.lock文件.如果在正常退出时,会清除这个mongod.lock文件,若要是异常退出,在下次启动的时候,会禁止启动,从而保留一份干净的一 ...

  10. 使用 Java 创建聊天客户端-2

    1.项目截图 java聊天核心代码: MyJavaChatClient ================================================================ ...