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. 基于Java8的日期时间工具类DateTimeFormatter

    原文:https://blog.csdn.net/qq_36596145/article/details/85331002 import java.time.Instant; import java. ...

  2. MyEclipse修改运行内存

    修改  myeclipse.ini -vmargs -Xmx1768m -XX:MaxPermSize=1320m -XX:ReservedCodeCacheSize=64m -Dosgi.nls.w ...

  3. What is URL Encoding and How does it work?

    Introduction A URL (Uniform Resource Locator) is the address of a resource in the world wide web. UR ...

  4. flask中使用ajax 处理前端请求,每隔一段时间请求不通的接口,结果展示同一页面

    需求: flask中使用ajax 处理前端请求,每隔一段时间请求不通的接口,结果展示同一页面 用到 setTimeout方法,setTimeout(function(){},1000):setTime ...

  5. [CTSC2008]网络管理Network

    题意 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条高速光 ...

  6. Java中ClassLoader浅析.

    一.问题 请在Eclipse中新建如下类,并运行它: 1 package java.lang; 2 3 public class Long { 4 public static void main(St ...

  7. 删除TOMCAT服务器上的文件

    deleteFile(文件名称,路径名称); public boolean deleteFile(String filename,String filepath){  String path =Ser ...

  8. QPainter 提高绘制效率的方法

    原文: https://my.oschina.net/u/3919756/blog/1944747 如果我们用painter一个一个的绘制直线,圆等在控件上,绘制效率会不高.为了提高效率,我们可以设置 ...

  9. 树莓派远程桌面--使用windows自带的远程桌面软件mstsc.exe

    步骤: 1.使用SSH登录树莓派 2.安装xrdp服务: sudo apt-get install xrdp 3.在Windows下打开命令框运行:mstsc 4.登录树莓派桌面 5.登录成功

  10. 题解[51nod1555] 布丁怪

    题解[51nod1555] 布丁怪 题面 解析 本文参考这位dalao的题解 首先有一个巧妙的转换, 开一个数组记录每个横坐标的纵坐标, 简单来说就是对于点(x,y),令a[x]=y. 于是问题就变成 ...