268 lines
14 KiB
HTML
268 lines
14 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>转义序列</title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-c_language_escape skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading">转义序列</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="c.html">c</a>‎ | <a href="c-language.html">language</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<p>转义序列用于在<a href="c-language-string_literal.html">字符串字面量</a>和<a href="c-language-character_constant.html">字符常量</a>中表示某些特殊字符。</p>
|
|
<p>下列转义序列可用。 ISO C 要求诊断是否有任何不列于此的字符出现于反斜杠之后:</p>
|
|
<table class="wikitable">
|
|
<tr>
|
|
<th>转义序列</th>
|
|
<th>描述</th>
|
|
<th>表示</th>
|
|
</tr>
|
|
<tr>
|
|
<th colspan="3">简单转义序列</th>
|
|
</tr>
|
|
<tr>
|
|
<td><code><b>\'</b></code></td>
|
|
<td>单引号</td>
|
|
<td>ASCII 编码中为字节 <code>0x27</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code><b>\"</b></code></td>
|
|
<td>双引号</td>
|
|
<td>ASCII 编码中为字节 <code>0x22</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code><b>\?</b></code></td>
|
|
<td>问号</td>
|
|
<td>ASCII 编码中为字节 <code>0x3f</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code><b>\\</b></code></td>
|
|
<td>反斜杠</td>
|
|
<td>ASCII 编码中为字节 <code>0x5c</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code><b>\a</b></code></td>
|
|
<td>响铃</td>
|
|
<td>ASCII 编码中为字节 <code>0x07</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code><b>\b</b></code></td>
|
|
<td>退格</td>
|
|
<td>ASCII 编码中为字节 <code>0x08</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code><b>\f</b></code></td>
|
|
<td>换页</td>
|
|
<td>ASCII 编码中为字节 <code>0x0c</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code><b>\n</b></code></td>
|
|
<td>换行</td>
|
|
<td>ASCII 编码中为字节 <code>0x0a</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code><b>\r</b></code></td>
|
|
<td>回车</td>
|
|
<td>ASCII 编码中为字节 <code>0x0d</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code><b>\t</b></code></td>
|
|
<td>水平制表</td>
|
|
<td>ASCII 编码中为字节 <code>0x09</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code><b>\v</b></code></td>
|
|
<td>垂直制表</td>
|
|
<td>ASCII 编码中为字节 <code>0x0b</code></td>
|
|
</tr>
|
|
<tr>
|
|
<th colspan="3">数值转义序列</th>
|
|
</tr>
|
|
<tr>
|
|
<td><code><b>\<span style="font-size:0.7em; line-height:130%"><i>nnn</i></span></b></code></td>
|
|
<td>任意八进制值</td>
|
|
<td>字节 <code><i>nnn</i></code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code><b>\x<span style="font-size:0.7em; line-height:130%"><i>nn</i></span></b></code></td>
|
|
<td>任意十六进制值</td>
|
|
<td>字节 <code><i>nn</i></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th colspan="3">通用字符名</th>
|
|
</tr>
|
|
<tr>
|
|
<td><code>\u<span style="font-size:0.7em; line-height:130%"><i>nnnn</i></span></code> <span class="t-mark-rev t-since-c99">(C99 起)</span></td>
|
|
<td>允许范围中的 <a href="https://en.wikipedia.org/wiki/Unicode" class="extiw" title="enwiki:Unicode">Unicode</a> 值<br />
|
|
可能生成多个编码单元</td>
|
|
<td>码位 <code>U+<i>nnnn</i></code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>\U<span style="font-size:0.7em; line-height:130%"><i>nnnnnnnn</i></span></code> <span class="t-mark-rev t-since-c99">(C99 起)</span></td>
|
|
<td>允许范围中的 <a href="https://en.wikipedia.org/wiki/Unicode" class="extiw" title="enwiki:Unicode">Unicode</a> 值<br />
|
|
可能生成多个编码单元</td>
|
|
<td>码位 <code>U+<i>nnnnnnnn</i></code></td>
|
|
</tr>
|
|
</table>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-c99">
|
|
<td>
|
|
<h3><span class="mw-headline" id=".E9.80.9A.E7.94.A8.E5.AD.97.E7.AC.A6.E5.90.8D.E7.9A.84.E8.8C.83.E5.9B.B4">通用字符名的范围</span></h3>
|
|
<p>若通用字符名对应不是 0x24 (<code>$</code>)、 0x40 (<code>@</code>) 或 0x60 (<code>`</code>) 的小于 0xA0 的码位,或代理码位(范围 0xD800-0xDFFF,含两端),则程序为谬构。换言之,<a href="c-language-translation_phases.html">基础源字符集</a>的成员与控制字符(在范围 0x0-0x1F 与 0x7F-0x9F 中)不能以通用字符名表达。</p>
|
|
<p>对应大于 0x10FFFF 的码位的通用字符名(在 ISO/IEC 10646 中未定义)能用于<a href="c-language-character_constant.html">字符常量</a>与<a href="c-language-string_literal.html">字符串字面量</a>。 C++20 中不允许这种用法。</p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-c99">(C99 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">注解</span></h3>
|
|
<p><code><b>\0</b></code> 在八进制转义序列中最常用,因为它表示空终止字符串中的空终止字符。</p>
|
|
<p>换行符 <code><b>\n</b></code> 在用于<a href="c-io.html">文本模式 I/O</a> 时有特殊含义:它被转换为 OS 限定的换行表示,通常是字节或字节序列。某些系统替而用长度域标记其文本行。</p>
|
|
<p>八进制转义序列拥有三个八进制位的长度限制,但若提前遇到不是合法八进制位的字符,则在首个这种字符处终止。</p>
|
|
<p>十六进制转义序列无长度限制,并在首个不是合法十六进制位的字符处终止。若单个十六进制转义序列所表示的值不适于此字符串字面量或字符常量中使用的字符类型( <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">char</span></span></span><span class="t-rev-inl t-since-c11"><span>、 <span class="t-c"><span class="mw-geshi c source-c">char16_t</span></span>、 <span class="t-c"><span class="mw-geshi c source-c">char32_t</span></span></span> <span><span class="t-mark-rev t-since-c11">(C11 起)</span></span></span> 或 <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">wchar_t</span></span></span> ),则结果未指定。</p>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-c99">
|
|
<td>
|
|
<p>窄字符串字面量<span class="t-rev-inl t-since-c11"><span>或 16 位字符串字面量</span> <span><span class="t-mark-rev t-since-c11">(C11 起)</span></span></span>中的通用字符名可能映射到多于一个编码单元,例如 <span class="t-c"><span class="mw-geshi c source-c">\U0001f34c</span></span> 在 UTF-8 中是 4 个 <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">char</span></span></span> 编码单元( <span class="t-c"><span class="mw-geshi c source-c">\xF0\x9F\x8D\x8C</span></span> )<span class="t-rev-inl t-since-c11"><span>,而在 UTF-16 中是 2 个 <span class="t-c"><span class="mw-geshi c source-c">char16_t</span></span> 编码单元( <span class="t-c"><span class="mw-geshi c source-c">\xD83C\xDF4C</span></span> )</span> <span><span class="t-mark-rev t-since-c11">(C11 起)</span></span></span>。</p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-c99">(C99 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<p>问号转义序列 <span class="t-c"><span class="mw-geshi c source-c">\<span class="sy4">?</span></span></span> 用于阻止在字符串字面量内转译<a href="c-language-operator_alternative.html">三标符</a>:如 <span class="t-c"><span class="mw-geshi c source-c"><span class="st0">"??/"</span></span></span> 的字符串被编译成 <span class="t-c"><span class="mw-geshi c source-c"><span class="st0">"<span class="es1">\"</span></span></span></span> ,但若如在 <span class="t-c"><span class="mw-geshi c source-c"><span class="st0">"?<span class="es1">\?</span>/"</span></span></span> 中转义第二个问号,则它变为 <span class="t-c"><span class="mw-geshi c source-c"><span class="st0">"??/"</span></span></span> 。</p>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h3>
|
|
<div class="t-example">
|
|
<div class="t-example-live-link"></div>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="c source-c">
|
|
<pre class="de1"><span class="co2">#include <stdio.h></span>
|
|
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"This<span class="es1">\n</span>is<span class="es1">\n</span>a<span class="es1">\n</span>test<span class="es1">\n</span><span class="es1">\n</span>She said, <span class="es1">\"</span>How are you?<span class="es1">\"</span><span class="es1">\n</span>"</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>输出:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="text source-text">
|
|
<pre class="de1">This
|
|
is
|
|
a
|
|
test
|
|
|
|
She said, "How are you?"</pre></div>
|
|
</div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E5.BC.95.E7.94.A8">引用</span></h3>
|
|
<div class="t-ref-std-17">
|
|
<ul>
|
|
<li>C17 标准(ISO/IEC 9899:2018):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>5.2.2 Character display semantics (p: 18-19)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>6.4.3 Universal Character names (p: 44)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>6.4.4.4 Character constants (p: 48-50)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="t-ref-std-11">
|
|
<ul>
|
|
<li>C11 标准(ISO/IEC 9899:2011):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>5.2.2 Character display semantics (p: 24-25)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>6.4.3 Universal Character names (p: 61)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>6.4.4.4 Character constants (p: 67-70)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="t-ref-std-c99">
|
|
<ul>
|
|
<li>C99 标准(ISO/IEC 9899:1999):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>5.2.2 Character display semantics (p: 19-20)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>6.4.3 Universal Character names (p: 53)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>6.4.4.4 Character constants (p: 59-61)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="t-ref-std-c89">
|
|
<ul>
|
|
<li>C89/C90 标准(ISO/IEC 9899:1990):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>2.2.2 Character display semantics</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>3.1.3.4 Character constants</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<ul>
|
|
<li><a href="c-language-ascii.html">ASCII 码表</a></li>
|
|
</ul>
|
|
<table class="t-dsc-begin"></table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|