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. jmeter 5.1.1版本 进行抓包的时候弹出输入密码

    先描述一下如何配置Jmeter 先新建一个Thread Group,比如我命令为抓包 新建一个HTTP(S) Test Script Recorder,进行如下的配置, 配置端口,我这边设置为8899 ...

  2. Helix QAC — 软件静态测试工具

    Helix QAC 是Perforce 公司(原PRQA 公司)产品,主要用于C/C++ 代码的完全自动化静态分析工作,可以提供编码规则检查.代码质量度量.软件结构分析.测试结果管理等功能.Helix ...

  3. windows程序意外关闭子订重启脚本

    window程序意外关闭自动重启脚本实现   @echo off :1 tasklist|find /i "xxxx"||start yyyy ping/n 11 127.1> ...

  4. AJAX学习笔记——JSON

    JSON基本概念 1.JSON : JavaScript对象表示法( JavaScript Object Notation ) 2.JSON是存储和交换文本信息的语法,类似XML.它采用键值对的方式来 ...

  5. H3C常见视图及命令

    H3C常见视图及命令 H3C Comware的视图模式 1.用户视图:查看系统的硬件和系统的信息 2.系统视图(类似于Cisco的配置模式) 3.路由协议视图 4.接口视图 5.用户界面视图 各种视图 ...

  6. Tomcat 配置及优化

    Tomcat配置优化,主要在于优化tomcat运行模式,并发参数和线程数, 以及jvm堆内存和垃圾回收相关参数的优化.下面将逐一介绍. 1. tomcat的3种运行模式 1.1 BIO - 同步阻塞I ...

  7. git将一个分支的内容替换为另一分支内容

    假设我想将我的linux分支内容替换master分支的内容. # 切换到master分支 git checkout master # 再将本地的master分支重置成linux git reset - ...

  8. C语言Ⅰ博客作业06

    这个作业属于哪个课程 C语言程序设计Ⅰ 这个作业要求在哪里 熟练掌握多分支结构,字符型数据类型和逻辑运算符 我在这个课程的目标是 https://www.cnblogs.com/tongyingjun ...

  9. Codeforces 380E Sereja and Dividing

    题面 洛谷传送门 题解 博客 有精度要求所以只用求几十次就差不多了 CODE #include <bits/stdc++.h> using namespace std; typedef l ...

  10. jquery 使用off移除事件 使用one绑定一次事件,on绑定事件后触发多次相同的事件的异常

    <!-- jquery 移除事件,绑定一次事件,搜狗 one --> <!DOCTYPE html> <html lang="en"> < ...