244 lines
12 KiB
HTML
244 lines
12 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_operator_alternative 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>C 源代码可以用任何包含 <a href="https://en.wikipedia.org/wiki/ISO_646" class="extiw" title="enwiki:ISO 646">ISO 646:1983</a> 不变量字符集的 8 位字符集书写,即使是非 ASCII 字符集。然而,数个 C 运算符和标点在 ISO 646 代码集外:<code>{, }, [, ], #, \, ^, |, ~</code>。为能使用所有这些符号不存在于其中字符编码(例如德文 <a rel="nofollow" class="external text" href="http://de.wikipedia.org/wiki/DIN_66003">DIN 66003</a> ),有二种可能:另一种使用这些字符集的运算符拼写,或二或三个 ISO 646 兼容字符的特殊组合,会像单个非 ISO 646 字符般转译它们。</p>
|
|
<h2><span class="mw-headline" id=".E8.BF.90.E7.AE.97.E7.AC.A6.E5.AE.8F.28C95.29">运算符宏<span class="t-mark-rev t-since-c95">(C95)</span></span></h2>
|
|
<p>有使用非 ISO 646 字符的替用拼写,作为宏定义于 <code><b><iso646.h></b></code> :</p>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc-header">
|
|
<td colspan="2">
|
|
<div>定义于头文件 <code><iso646.h></code></div>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc-hitem">
|
|
<td>基本</td>
|
|
<td>替用</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span><code>&&</code></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><code>and</code><br />
|
|
<span class="t-mark">(运算符宏)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span><code>&=</code></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><code>and_eq</code><br />
|
|
<span class="t-mark">(运算符宏)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span><code>&</code></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><code>bitand</code><br />
|
|
<span class="t-mark">(运算符宏)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span><code>|</code></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><code>bitor</code><br />
|
|
<span class="t-mark">(运算符宏)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span><code>~</code></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><code>compl</code><br />
|
|
<span class="t-mark">(运算符宏)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span><code>!</code></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><code>not</code><br />
|
|
<span class="t-mark">(运算符宏)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span><code>!=</code></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><code>not_eq</code><br />
|
|
<span class="t-mark">(运算符宏)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span><code>||</code></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><code>or</code><br />
|
|
<span class="t-mark">(运算符宏)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span><code>|=</code></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><code>or_eq</code><br />
|
|
<span class="t-mark">(运算符宏)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span><code>^</code></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><code>xor</code><br />
|
|
<span class="t-mark">(运算符宏)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span><code>^=</code></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><code>xor_eq</code><br />
|
|
<span class="t-mark">(运算符宏)</span></td>
|
|
</tr>
|
|
</table>
|
|
<p>字符 <span class="t-c"><span class="mw-geshi c source-c"><span class="sy3">&</span></span></span> 及 <span class="t-c"><span class="mw-geshi c source-c"><span class="sy3">!</span></span></span> 在 ISO-646 下不变,但仍然为这些运算符提供替用写法,以使用这些字符适应更加受限的历史字符集。</p>
|
|
<p>没有等于运算符的替用拼写 <span class="t-c"><span class="mw-geshi c source-c"><span class="sy1">==</span></span></span> ,因为字符 <span class="t-c"><span class="mw-geshi c source-c"><span class="sy1">=</span></span></span> 已在所有受支持字符集中存在。</p>
|
|
<h2><span class="mw-headline" id=".E6.9B.BF.E7.94.A8.E8.AE.B0.E5.8F.B7.28C95.29">替用记号<span class="t-mark-rev t-since-c95">(C95)</span></span></h2>
|
|
<p>下列替用记号是核心语言的一部分,而且在语言的所有方面,每个替用记号表现准确等同于其基本记号,除了其拼写(<a href="c-preprocessor-replace.html">字符串化运算符</a>可令拼写可见)。双字另种记号有时被称为“双标符”。</p>
|
|
<p><br /></p>
|
|
<table class="wikitable">
|
|
<tr style="text-align: left;">
|
|
<th>基本</th>
|
|
<th>替用</th>
|
|
</tr>
|
|
<tr>
|
|
<td><code>{</code></td>
|
|
<td><code><%</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code></code>}</td>
|
|
<td><code>%></code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>[</code></td>
|
|
<td><code><:</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>]</code></td>
|
|
<td><code>:></code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>#</code></td>
|
|
<td><code>%:</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>##</code></td>
|
|
<td><code>%:%:</code></td>
|
|
</tr>
|
|
</table>
|
|
<h2><span class="mw-headline" id=".E4.B8.89.E6.A0.87.E7.AC.A6">三标符</span></h2>
|
|
<p>下列三字符组(三标符)<a href="c-language-translation_phases.html">在注释前分析并在字符串字面量中得到辨认</a>,而且每个三标符的出现会被对应的基本字符取代:</p>
|
|
<table class="wikitable">
|
|
<tr style="text-align: left;">
|
|
<th>基本</th>
|
|
<th>三标符</th>
|
|
</tr>
|
|
<tr>
|
|
<td><code>{</code></td>
|
|
<td><code>??<</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code></code>}</td>
|
|
<td><code>??></code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>[</code></td>
|
|
<td><code>??(</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>]</code></td>
|
|
<td><code>??)</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>#</code></td>
|
|
<td><code>??=</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>\</code></td>
|
|
<td><code>??/</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>^</code></td>
|
|
<td><code>??'</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>|</code></td>
|
|
<td><code>??!</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>~</code></td>
|
|
<td><code>??-</code></td>
|
|
</tr>
|
|
</table>
|
|
<p>因为三标符在早期处理,故如 <span class="t-c"><span class="mw-geshi c source-c"><span class="co1">// Will the next line be executed?????/</span></span></span> 的注释可以有效地注释掉下一行,且如 <span class="t-c"><span class="mw-geshi c source-c"><span class="st0">"What's going on??!"</span></span></span> 的字符串字面量被分析成 <span class="t-c"><span class="mw-geshi c source-c"><span class="st0">"What's going on|"</span></span></span> 。</p>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h3>
|
|
<div class="t-example">
|
|
<p>下例演示来自 <code><b><iso646.h></b></code> 的替用运算符拼写,以及双标符和三标符的使用。 首个命令行参数, argv[1] ,要求用引号标注: ", World!" 。</p>
|
|
<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="sy2">%</span><span class="sy4">:</span>include <span class="sy1"><</span>stdlib.<span class="me1">h</span><span class="sy1">></span>
|
|
<span class="sy2">%</span><span class="sy4">:</span>include <span class="sy1"><</span>stdio.<span class="me1">h</span><span class="sy1">></span>
|
|
<span class="sy2">%</span><span class="sy4">:</span>include <span class="sy1"><</span>iso646.<span class="me1">h</span><span class="sy1">></span>
|
|
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">int</span> argc, <span class="kw4">char</span><span class="sy2">**</span> argv<span class="br0">)</span>
|
|
<span class="sy4">??</span><span class="sy1"><</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>argc <span class="sy1">></span> <span class="nu0">1</span> and argv<span class="sy1"><</span><span class="sy4">:</span><span class="nu0">1</span><span class="sy4">:</span><span class="sy1">></span> not_eq <a href="c-types-NULL.html"><span class="kw103">NULL</span></a><span class="br0">)</span>
|
|
<span class="sy1"><</span><span class="sy2">%</span>
|
|
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"Hello%s<span class="es1">\n</span>"</span>, argv<span class="sy1"><</span><span class="sy4">:</span><span class="nu0">1</span><span class="sy4">:</span><span class="sy1">></span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="sy2">%</span><span class="sy1">></span>
|
|
|
|
<span class="kw1">return</span> <a href="c-program-EXIT_status.html"><span class="kw493">EXIT_SUCCESS</span></a><span class="sy4">;</span>
|
|
<span class="sy4">??</span><span class="sy1">></span></pre></div>
|
|
</div>
|
|
<p>可能的输出:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="text source-text">
|
|
<pre class="de1">Hello, World!</pre></div>
|
|
</div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<table class="t-dsc-begin"></table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|