Files
hustoj/web/cppreference-zh/chmhelp/c-language-switch.html
2025-08-01 12:57:54 +08:00

243 lines
17 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>switch &#35821;&#21477;</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_switch skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">switch &#35821;&#21477;</h1>
<div id="bodyContent">
<div id="contentSub"><span class="subpages">&lt; <a href="c.html">c</a>&lrm; | <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>&#25353;&#29031;&#25972;&#25968;&#21442;&#25968;&#30340;&#20540;&#25191;&#34892;&#20195;&#30721;&#12290;</p>
<p>&#22312;&#38656;&#35201;&#25353;&#29031;&#25972;&#25968;&#20540;&#25191;&#34892;&#22810;&#20010;&#20998;&#25903;&#20013;&#30340;&#19968;&#20010;&#25110;&#25968;&#20010;&#20043;&#22788;&#20351;&#29992;&#12290;</p>
<h3><span class="mw-headline" id=".E8.AF.AD.E6.B3.95">&#35821;&#27861;</span></h3>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td class="t-sdsc-nopad"><span class="t-spar">&#23646;&#24615;&#35828;&#26126;&#31526;&#24207;&#21015;</span><span class="t-mark">(&#21487;&#36873;)</span> <code><b>switch (</b></code> <span class="t-spar">&#34920;&#36798;&#24335;</span> <code><b>)</b></code> <span class="t-spar">&#35821;&#21477;</span></td>
<td class="t-sdsc-nopad"></td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<table class="t-par-begin">
<tr class="t-par">
<td><span class="t-spar">&#23646;&#24615;&#35828;&#26126;&#31526;&#24207;&#21015;</span></td>
<td>-</td>
<td><span class="t-mark-rev t-since-c23">(C23)</span>&#21487;&#36873;&#30340;<a href="c-language-attributes.html">&#23646;&#24615;</a>&#21015;&#34920;&#65292;&#24212;&#29992;&#21040; <code>switch</code> &#35821;&#21477;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#34920;&#36798;&#24335;</span></td>
<td>-</td>
<td>&#20219;&#20309;<a href="c-language-types.html#.E7.B1.BB.E5.9E.8B.E7.BB.84.E5.88.AB">&#25972;&#25968;&#31867;&#22411;</a>&#65288; char &#12289;&#26377;&#31526;&#21495;&#25110;&#26080;&#31526;&#21495;&#25972;&#25968;&#65292;&#25110;&#26522;&#20030;&#65289;<a href="c-language-expressions.html">&#34920;&#36798;&#24335;</a></td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#35821;&#21477;</span></td>
<td>-</td>
<td>&#20219;&#20309;<a href="c-language-statements.html">&#35821;&#21477;</a>&#65288;&#20856;&#22411;&#20026;&#22797;&#21512;&#35821;&#21477;&#65289;&#12290;&#20801;&#35768;&#22312; <span class="t-spar">&#35821;&#21477;</span> &#20013;&#26377; <code><b>case:</b></code> &#21644; <code><b>default:</b></code> &#26631;&#21495;&#65292;&#32780; <span class="t-c"><span class="mw-geshi c source-c"><span class="kw1">break</span><span class="sy4">;</span></span></span> &#35821;&#21477;&#25317;&#26377;&#29305;&#27530;&#21547;&#20041;&#12290;</td>
</tr>
</table>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>case</b></code> <span class="t-spar">&#24120;&#37327;&#34920;&#36798;&#24335;</span> <code><b>:</b></code> <span class="t-spar">&#35821;&#21477;</span></td>
<td>(1)</td>
<td><span class="t-mark-rev t-until-c23">(C23 &#21069;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><span class="t-spar">&#23646;&#24615;&#35828;&#26126;&#31526;&#24207;&#21015;</span><span class="t-mark">(&#21487;&#36873;)</span> <code><b>case</b></code> <span class="t-spar">&#24120;&#37327;&#34920;&#36798;&#24335;</span> <code><b>:</b></code> <span class="t-spar">&#35821;&#21477;</span><span class="t-mark">(&#21487;&#36873;)</span></td>
<td>(1)</td>
<td><span class="t-mark-rev t-since-c23">(C23 &#36215;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>default</b></code> <code><b>:</b></code> <span class="t-spar">&#35821;&#21477;</span></td>
<td>(2)</td>
<td><span class="t-mark-rev t-until-c23">(C23 &#21069;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><span class="t-spar">&#23646;&#24615;&#35828;&#26126;&#31526;&#24207;&#21015;</span><span class="t-mark">(&#21487;&#36873;)</span> <code><b>default</b></code> <code><b>:</b></code> <span class="t-spar">&#35821;&#21477;</span><span class="t-mark">(&#21487;&#36873;)</span></td>
<td>(2)</td>
<td><span class="t-mark-rev t-since-c23">(C23 &#36215;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<table class="t-par-begin">
<tr class="t-par">
<td><span class="t-spar">&#24120;&#37327;&#34920;&#36798;&#24335;</span></td>
<td>-</td>
<td>&#20219;&#20309;&#25972;&#25968;<a href="c-language-constant_expression.html">&#24120;&#37327;&#34920;&#36798;&#24335;</a></td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#23646;&#24615;&#35828;&#26126;&#31526;&#24207;&#21015;</span></td>
<td>-</td>
<td><span class="t-mark-rev t-since-c23">(C23)</span>&#21487;&#36873;&#30340;<a href="c-language-attributes.html">&#23646;&#24615;</a>&#21015;&#34920;&#65292;&#24212;&#29992;&#21040;&#26631;&#21495;</td>
</tr>
</table>
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">&#35299;&#37322;</span></h3>
<p>switch &#35821;&#21477;&#20307;&#21487;&#25317;&#26377;&#20219;&#24847;&#25968;&#37327;&#30340; <code>case:</code> &#26631;&#21495;&#65292;&#21482;&#35201;&#25152;&#26377; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#22343;&#20026;&#29420;&#26377;&#65288;&#22312;<a href="c-language-conversion.html">&#36716;&#25442;</a>&#21040; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#30340;<a href="c-language-conversion.html#.E6.95.B4.E6.95.B0.E6.8F.90.E5.8D.87">&#25552;&#21319;&#21518;&#31867;&#22411;</a>&#21518;&#65289;&#12290;&#33267;&#22810;&#21487;&#20197;&#23384;&#22312;&#19968;&#20010; <code>default:</code> &#26631;&#21495;&#65288;&#23613;&#31649;&#23884;&#22871;&#30340; switch &#35821;&#21477;&#21487;&#20351;&#29992;&#20854;&#33258;&#36523;&#30340; <code>default:</code> &#26631;&#21495;&#65292;&#25110;&#25317;&#26377;&#24120;&#37327;&#31561;&#20110;&#22806;&#22260; switch &#25152;&#29992;&#30340; <code>case:</code> &#30340;&#26631;&#21495;&#65289;&#12290;</p>
<p>&#33509; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#27714;&#20540;&#20026;&#31561;&#20110;&#19968;&#20010; <span class="t-spar">&#24120;&#37327;&#34920;&#36798;&#24335;</span> &#22312;&#36716;&#25442;&#21040; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#30340;&#25552;&#21319;&#31867;&#22411;&#21518;&#30340;&#20540;&#65292;&#21017;&#36716;&#31227;&#25511;&#21046;&#21040;&#26631;&#21495;&#20026;&#35813; <span class="t-spar">&#24120;&#37327;&#34920;&#36798;&#24335;</span> &#30340;&#35821;&#21477;&#12290;</p>
<p>&#33509; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#27714;&#20540;&#20026;&#19981;&#21305;&#37197;&#20219;&#20309; <code>case:</code> &#26631;&#21495;&#30340;&#20540;&#65292;&#32780;&#23384;&#22312; <code>default:</code> &#26631;&#21495;&#65292;&#21017;&#36716;&#31227;&#25511;&#21046;&#21040;&#26631;&#21495;&#20026; <code>default:</code> &#30340;&#35821;&#21477;&#12290;</p>
<p>&#33509; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#27714;&#20540;&#20026;&#19981;&#21305;&#37197;&#20219;&#20309; <code>case:</code> &#26631;&#21495;&#30340;&#20540;&#65292;&#19988;&#19981;&#23384;&#22312; <code>default:</code> &#26631;&#21495;&#65292;&#21017;&#19981;&#25191;&#34892; switch &#20307;&#30340;&#20219;&#20309;&#37096;&#20998;&#12290;</p>
<p>&#22312; <span class="t-spar">&#35821;&#21477;</span> &#20013;&#30340;&#20219;&#20309;&#20301;&#32622;&#36935;&#21040; <a href="c-language-break.html">break</a> &#35821;&#21477;&#26102;&#65292;&#36339;&#20986;&#35821;&#21477;&#20307;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="c source-c">
<pre class="de1"><span class="kw1">switch</span><span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span> <span class="br0">{</span>
<span class="kw1">case</span> <span class="nu0">1</span> <span class="sy4">:</span> <a href="c-io-puts.html"><span class="kw836">puts</span></a><span class="br0">(</span><span class="st0">&quot;1&quot;</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#25171;&#21360;&ldquo; 1 &rdquo;</span>
<span class="kw1">case</span> <span class="nu0">2</span> <span class="sy4">:</span> <a href="c-io-puts.html"><span class="kw836">puts</span></a><span class="br0">(</span><span class="st0">&quot;2&quot;</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#28982;&#21518;&#25171;&#21360;&ldquo; 2 &rdquo;&#65288;&ldquo;&#32487;&#32493;&rdquo;&#65289;</span>
<span class="br0">}</span></pre></div>
</div>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="c source-c">
<pre class="de1"><span class="kw1">switch</span><span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span> <span class="br0">{</span>
<span class="kw1">case</span> <span class="nu0">1</span> <span class="sy4">:</span> <a href="c-io-puts.html"><span class="kw836">puts</span></a><span class="br0">(</span><span class="st0">&quot;1&quot;</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#25171;&#21360;&ldquo; 1 &rdquo;</span>
<span class="kw1">break</span><span class="sy4">;</span> <span class="co1">// &#24182;&#36864;&#20986; switch</span>
<span class="kw1">case</span> <span class="nu0">2</span> <span class="sy4">:</span> <a href="c-io-puts.html"><span class="kw836">puts</span></a><span class="br0">(</span><span class="st0">&quot;2&quot;</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">break</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<table class="t-rev-begin">
<tr class="t-rev t-since-c99">
<td>
<p>&#21516;&#25152;&#26377;&#36873;&#25321;&#21644;&#36845;&#20195;&#35821;&#21477;&#65292; switch &#35821;&#21477;&#24314;&#31435;<a href="c-language-scope.html">&#22359;&#20316;&#29992;&#22495;</a>&#65306;&#20219;&#20309; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#30340;&#26631;&#35782;&#31526;&#22312; <span class="t-spar">&#35821;&#21477;</span> &#21518;&#31163;&#24320;&#20316;&#29992;&#22495;&#12290;</p>
<p>&#33509; <code>case:</code> &#25110; <code>default:</code> &#26631;&#21495;&#22312; VLA &#25110;&#21478;&#19968;&#25317;&#26377;&#21487;&#21464;&#20462;&#25913;&#31867;&#22411;&#30340;&#26631;&#35782;&#31526;&#30340;&#20316;&#29992;&#22495;&#20869;&#65292;&#21017;&#25972;&#20010; switch &#35821;&#21477;&#37117;&#24517;&#39035;&#22312;&#20854;&#20316;&#29992;&#22495;&#20869;&#65288;&#25442;&#35328;&#20043;&#65292; VLA &#24517;&#39035;&#22312;&#25972;&#20010; switch &#21069;&#25110;&#26368;&#21518;&#30340;&#26631;&#21495;&#21518;&#22768;&#26126;&#65289;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="c source-c">
<pre class="de1"><span class="kw1">switch</span> <span class="br0">(</span>expr<span class="br0">)</span>
<span class="br0">{</span>
<span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">4</span><span class="sy4">;</span> <span class="co1">// &#38750; VLA &#65307;&#22768;&#26126;&#20110;&#27492; OK</span>
f<span class="br0">(</span>i<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20915;&#19981;&#35843;&#29992;</span>
<span class="co1">// int a[i]; // &#38169;&#35823;&#65306; VLA &#19981;&#33021;&#22768;&#26126;&#20110;&#27492;</span>
<span class="kw1">case</span> <span class="nu0">0</span><span class="sy4">:</span>
i <span class="sy1">=</span> <span class="nu0">17</span><span class="sy4">;</span>
<span class="kw1">default</span><span class="sy4">:;</span>
<span class="kw4">int</span> a<span class="br0">[</span>i<span class="br0">]</span><span class="sy4">;</span> <span class="co1">// &#22312;&#27492;&#22768;&#26126; VLA OK</span>
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;%d<span class="es1">\n</span>&quot;</span>, i<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#33509; expr == 0 &#21017;&#25171;&#21360; 17 &#65292;&#21542;&#21017;&#25171;&#21360;&#19981;&#30830;&#23450;&#20540;</span>
<span class="br0">}</span></pre></div>
</div>
</td>
<td><span class="t-mark-rev t-since-c99">(C99 &#36215;)</span></td>
</tr>
</table>
<p><br /></p>
<h3><span class="mw-headline" id=".E5.85.B3.E9.94.AE.E8.AF.8D">&#20851;&#38190;&#35789;</span></h3>
<p><a href="c-keyword-switch.html"><tt>switch</tt></a>, <a href="c-keyword-case.html"><tt>case</tt></a>, <a href="c-keyword-default.html"><tt>default</tt></a></p>
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">&#31034;&#20363;</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 &lt;stdio.h&gt;</span>
<span class="kw4">void</span> func<span class="br0">(</span><span class="kw4">int</span> x<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">&quot;func(%d): &quot;</span>, x<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">switch</span><span class="br0">(</span>x<span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">case</span> <span class="nu0">1</span><span class="sy4">:</span> <a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;case 1, &quot;</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">case</span> <span class="nu0">2</span><span class="sy4">:</span> <a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;case 2, &quot;</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">case</span> <span class="nu0">3</span><span class="sy4">:</span> <a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;case 3.<span class="es1">\n</span>&quot;</span><span class="br0">)</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="kw1">case</span> <span class="nu0">4</span><span class="sy4">:</span> <a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;case 4, &quot;</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">case</span> <span class="nu0">5</span><span class="sy4">:</span> <a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;case 5, &quot;</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">default</span><span class="sy4">:</span> <a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;default.<span class="es1">\n</span>&quot;</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="br0">}</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">for</span><span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> <span class="nu0">9</span><span class="sy4">;</span> <span class="sy2">++</span>i<span class="br0">)</span> func<span class="br0">(</span>i<span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#36755;&#20986;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="text source-text">
<pre class="de1">func(1): case 1, case 2, case 3.
func(2): case 2, case 3.
func(3): case 3.
func(4): case 4, case 5, default.
func(5): case 5, default.
func(6): default.
func(7): default.
func(8): default.</pre></div>
</div>
</div>
<h3><span class="mw-headline" id=".E5.BC.95.E7.94.A8">&#24341;&#29992;</span></h3>
<div class="t-ref-std-17">
<ul>
<li>C17 &#26631;&#20934;&#65288;ISO/IEC 9899:2018&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>6.8.4.2 The switch statement (p: 108-109)</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-11">
<ul>
<li>C11 &#26631;&#20934;&#65288;ISO/IEC 9899:2011&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>6.8.4.2 The switch statement (p: 149-150)</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c99">
<ul>
<li>C99 &#26631;&#20934;&#65288;ISO/IEC 9899:1999&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>6.8.4.2 The switch statement (p: 134-135)</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c89">
<ul>
<li>C89/C90 &#26631;&#20934;&#65288;ISO/IEC 9899:1990&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>3.6.4.2 The switch statement</li>
</ul>
</dd>
</dl>
</div>
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">&#21442;&#38405;</span></h3>
<table class="t-dsc-begin"></table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>