101 lines
6.9 KiB
HTML
101 lines
6.9 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_preprocessor 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></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<p>预处理器于<a href="c-language-translation_phases.html">翻译阶段 4</a> 执行,在编译之前。预处理的结果是将被传递给实际编译器的单个文件.</p>
|
|
<h3><span class="mw-headline" id=".E6.8C.87.E4.BB.A4">指令</span></h3>
|
|
<p>预处理指令控制预处理器的行为。每个指令占据一行,且拥有下列格式:</p>
|
|
<ul>
|
|
<li><code>#</code> 字符</li>
|
|
<li>预处理指令(<code>define</code>、<code>undef</code>、<code>include</code>、<code>if</code>、<code>ifdef</code>、<code>ifndef</code>、<code>else</code>、<code>elif</code><span class="t-rev-inl t-since-c23"><span>、<code>elifdef</code>、<code>elifndef</code></span> <span><span class="t-mark-rev t-since-c23">(C23 起)</span></span></span>、<code>endif</code>、<code>line</code>、<code>error</code>、<code>pragma</code> 之一)<sup id="cite_ref-1" class="reference"><a href="c-preprocessor.html#cite_note-1">[1]</a></sup></li>
|
|
<li>实参(取决于指令)</li>
|
|
<li>换行符</li>
|
|
</ul>
|
|
<p>允许空指令(跟随换行符的 <code>#</code> ),而它无效果。</p>
|
|
<h3><span class="mw-headline" id=".E8.83.BD.E5.8A.9B">能力</span></h3>
|
|
<p>预处理器拥有源文件翻译能力:</p>
|
|
<ul>
|
|
<li><b><a href="c-preprocessor-conditional.html">有条件</a></b>编译源文件的某些部分(由 <code>#if</code>、<code>#ifdef</code>、<code>#ifndef</code>、<code>#else</code>、<code>#elif</code><span class="t-rev-inl t-since-c23"><span>、<code>elifdef</code>、<code>elifndef</code></span> <span><span class="t-mark-rev t-since-c23">(C23 起)</span></span></span> 和 <code>#endif</code> 指令控制)。</li>
|
|
<li><b><a href="c-preprocessor-replace.html">替换</a></b>文本宏,可以连接或加引标识符(以指令 <code>#define</code> 和 <code>#undef</code> ,运算符 <code>#</code> 和 <code>##</code> 控制)。</li>
|
|
<li><b><a href="c-preprocessor-include.html">包含</a></b>其他文件(以指令 <code>#include</code> 控制)。</li>
|
|
<li>导致<b><a href="c-preprocessor-error.html">错误</a></b>(以指令 <code>#error</code> 控制)。</li>
|
|
</ul>
|
|
<p>能控制预处理器的下列方面:</p>
|
|
<ul>
|
|
<li><b><a href="c-preprocessor-impl.html">实现定义</a></b>行为(以指令 <code>#pragma</code> <span class="t-rev-inl t-since-c99"><span>及运算符 <code>_Pragma</code></span> <span><span class="t-mark-rev t-since-c99">(C99 起)</span></span></span>控制)。</li>
|
|
<li><b><a href="c-preprocessor-line.html">文件名与行信息</a></b>,可用于预处理器(以指令 <code>#line</code> 控制)。</li>
|
|
</ul>
|
|
<h3><span class="mw-headline" id=".E8.84.9A.E6.B3.A8">脚注</span></h3>
|
|
<ol class="references">
|
|
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="c-preprocessor.html#cite_ref-1">↑</a></span> <span class="reference-text">这些指令是标准定义的。标准不定义其他指令的行为:它们可以被忽略、拥有一些有用的含义或导致编译时错误。即使忽略,也会在预处理器完成工作时将它们从源码中移除。一种常用的非标准扩展是 <code>#warning</code> 指令,它在编译期间放出一条用户定义的消息。</span></li>
|
|
</ol>
|
|
<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>6.10 Preprocessing directives (p: 117-129)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="t-ref-std-11">
|
|
<ul>
|
|
<li>C11 标准(ISO/IEC 9899:2011):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>6.10 Preprocessing directives (p: 160-178)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="t-ref-std-c99">
|
|
<ul>
|
|
<li>C99 标准(ISO/IEC 9899:1999):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>6.10 Preprocessing directives (p: 145-162)</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>3.8 PREPROCESSING DIRECTIVES</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</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>
|