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

103 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>&#27714;&#20540;&#39034;&#24207;</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_eval_order skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#27714;&#20540;&#39034;&#24207;</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>&#38500;&#19979;&#21015;&#26631;&#20986;&#32773;&#65292;&#20219;&#24847; C &#36816;&#31639;&#31526;&#30340;&#36816;&#31639;&#25968;&#27714;&#20540;&#39034;&#24207;&#65292;&#21253;&#25324;&#20989;&#25968;&#35843;&#29992;&#34920;&#36798;&#24335;&#30340;&#20989;&#25968;&#21442;&#25968;&#27714;&#20540;&#39034;&#24207;&#65292;&#21450;&#20219;&#20309;&#34920;&#36798;&#24335;&#30340;&#23376;&#34920;&#36798;&#24335;&#27714;&#20540;&#39034;&#24207;&#37117;&#26159;&#26410;&#25351;&#23450;&#30340;&#12290;&#32534;&#35793;&#22120;&#20250;&#20197;&#20219;&#24847;&#39034;&#24207;&#23545;&#20854;&#27714;&#20540;&#65292;&#32780;&#19988;&#22312;&#21516;&#19968;&#34920;&#36798;&#24335;&#34987;&#20877;&#24230;&#27714;&#20540;&#26102;&#21487;&#36873;&#29992;&#21478;&#19968;&#31181;&#39034;&#24207;&#12290;</p>
<p>C &#20013;&#27809;&#26377;&#20174;&#24038;&#21040;&#21491;&#25110;&#20174;&#21491;&#21040;&#24038;&#27714;&#20540;&#30340;&#27010;&#24565;&#65292;&#36825;&#19981;&#20250;&#19982;&#36816;&#31639;&#31526;&#30340;&#20174;&#24038;&#21040;&#21491;&#25110;&#20174;&#21491;&#21040;&#24038;&#32467;&#21512;&#24615;&#28151;&#28102;&#65306;&#34920;&#36798;&#24335; <code>f1() + f2() + f3()</code> &#34987;&#20998;&#26512;&#25104; <code>(f1() + f2()) + f3()</code> &#65292;&#22240;&#20026; operator+ &#30340;&#20174;&#24038;&#21040;&#21491;&#32467;&#21512;&#24615;&#65292;&#20294;&#36816;&#34892;&#26102;&#23545; <code>f3</code> &#30340;&#20989;&#25968;&#35843;&#29992;&#21487;&#20197;&#26368;&#20808;&#12289;&#26368;&#21518;&#65292;&#25110;&#22312; <code>f1()</code> &#19982; <code>f2()</code> &#20043;&#38388;&#27714;&#20540;&#12290;</p>
<h3><span class="mw-headline" id=".E5.AE.9A.E4.B9.89">&#23450;&#20041;</span></h3>
<h4><span class="mw-headline" id=".E6.B1.82.E5.80.BC">&#27714;&#20540;</span></h4>
<p>&#23545;&#20110;&#27599;&#20010;&#34920;&#36798;&#24335;&#25110;&#23376;&#34920;&#36798;&#24335;&#65292;&#26377;&#20108;&#31181;&#27714;&#20540;&#20026;&#32534;&#35793;&#22120;&#36827;&#34892;&#65288;&#20004;&#32773;&#37117;&#26159;&#21487;&#36873;&#30340;&#65289;&#65306;</p>
<ul>
<li><i>&#20540;&#35745;&#31639;&#65288; value computation &#65289;</i>&#65306;&#35745;&#31639;&#34920;&#36798;&#24335;&#25152;&#36820;&#22238;&#30340;&#20540;&#12290;&#36825;&#21487;&#20197;&#28041;&#21450;&#21040;&#30830;&#23450;&#23545;&#35937;&#36523;&#20221;&#65288;<a href="c-language-value_category.html">&#24038;&#20540;&#27714;&#20540;</a>&#65289;&#25110;&#35835;&#21462;&#20043;&#21069;&#36171;&#32473;&#23545;&#35937;&#30340;&#20540;&#65288;&#21491;&#20540;&#27714;&#20540;&#65289;</li>
<li><i>&#21103;&#25928;&#24212;&#65288; side effect &#65289;</i>&#65306;&#35775;&#38382;&#65288;&#35835;&#25110;&#20889;&#65289;&#20197; <a href="c-language-volatile.html">volatile</a> &#24038;&#20540;&#25351;&#20195;&#30340;&#23545;&#35937;&#12289;&#20462;&#25913;&#65288;&#20889;&#65289;&#23545;&#35937;<span class="t-rev-inl t-since-c11"><span>&#12289;&#21407;&#23376;&#21516;&#27493;</span> <span><span class="t-mark-rev t-since-c11">(C11 &#36215;)</span></span></span>&#12289;&#20462;&#25913;&#25991;&#20214;&#12289;&#20462;&#25913;&#28014;&#28857;&#29615;&#22659;&#65288;&#33509;&#25903;&#25345;&#65289;&#25110;&#35843;&#29992;&#36827;&#34892;&#19978;&#36848;&#25805;&#20316;&#30340;&#20989;&#25968;&#12290;</li>
</ul>
<p>&#33509;&#34920;&#36798;&#24335;&#19981;&#20135;&#29983;&#21103;&#25928;&#24212;&#65292;&#19988;&#32534;&#35793;&#22120;&#33021;&#30830;&#23450;&#20854;&#20540;&#19981;&#34987;&#20351;&#29992;&#65292;&#21017;&#34920;&#36798;&#24335;<a href="https://zh.cppreference.com/mwiki/index.php?title=c/language/as-if&amp;action=edit&amp;redlink=1" class="new" title="c/language/as-if&#65288;&#39029;&#38754;&#19981;&#23384;&#22312;&#65289;">&#21487;&#20197;&#19981;&#27714;&#20540;</a>&#12290;</p>
<h4><span class="mw-headline" id=".E6.8E.92.E5.BA.8F">&#25490;&#24207;</span></h4>
<p>&ldquo;&#20808;&#24207;&#20110;&#65288; sequenced before &#65289;&rdquo;&#26159;&#19968;&#31181;&#21516;&#19968;&#32447;&#31243;&#20869;&#27714;&#20540;&#30340;&#19981;&#23545;&#31216;&#12289;&#20256;&#36882;&#24615;&#12289;&#25104;&#23545;&#30340;&#20851;&#31995;&#65288;&#33509;&#24341;&#20837;&#21407;&#23376;&#31867;&#22411;&#21644;&#20869;&#23384;&#23631;&#38556;&#65292;&#21017;&#23427;&#21487;&#20197;&#25193;&#23637;&#21040;&#32447;&#31243;&#38388;&#65289;&#12290;</p>
<ul>
<li>&#33509;&#22312;&#23376;&#34920;&#36798;&#24335; E1 &#21644; E2 &#38388;&#23384;&#22312;<i>&#24207;&#21015;&#28857;&#65288; <a href="https://en.wikipedia.org/wiki/Sequence_point" class="extiw" title="enwiki:Sequence point">sequence point</a> &#65289;</i>&#65292;&#21017; E1 &#30340;&#20540;&#35745;&#31639;&#21644;&#21103;&#25928;&#24212;&#37117;<i>&#20808;&#24207;&#20110;</i> E2 &#30340;&#25152;&#26377;&#20540;&#35745;&#31639;&#21644;&#21103;&#25928;&#24212;</li>
</ul>
<table class="t-rev-begin">
<tr class="t-rev t-since-c11">
<td>
<ul>
<li>&#33509;&#27714;&#20540; A &#20808;&#24207;&#20110;&#27714;&#20540; B&#65292;&#21017;&#27714;&#20540; A &#23558;&#22312;&#27714;&#20540; B &#24320;&#22987;&#21069;&#23436;&#25104;&#12290;</li>
<li>&#33509;&#27714;&#20540; A &#19981;&#20808;&#24207;&#20110;&#27714;&#20540; B&#65292;&#19988;&#27714;&#20540; B &#20808;&#24207;&#20110;&#27714;&#20540; A&#65292;&#21017;&#27714;&#20540; B &#23558;&#22312;&#27714;&#20540; A &#24320;&#22987;&#21069;&#23436;&#25104;&#12290;</li>
<li>&#33509;&#27714;&#20540; A &#19981;&#20808;&#24207;&#20110;&#27714;&#20540; B&#65292;&#19988;&#27714;&#20540; B &#19981;&#20808;&#24207;&#20110;&#27714;&#20540; A &#65292;&#21017;&#23384;&#22312;&#20108;&#31181;&#21487;&#33021;&#65306;
<ul>
<li>&#27714;&#20540; A &#19982; B &#26159;&#26080;&#39034;&#24207;&#65288; unsequenced &#65289;&#30340;&#65306;&#23427;&#20204;&#21487;&#20197;&#20197;&#20219;&#24847;&#39034;&#24207;&#36827;&#34892;&#65292;&#24182;&#19988;&#21487;&#20197;&#37325;&#21472;&#65288;&#22312;&#25191;&#34892;&#30340;&#21333;&#19968;&#32447;&#31243;&#20013;&#65292;&#32534;&#35793;&#22120;&#21487;&#20197;&#20132;&#38169;&#22320;&#20889;&#20837;&#26500;&#25104; A &#19982; B &#30340; CPU &#25351;&#20196;&#65289;</li>
<li>&#27714;&#20540; A &#19982; B &#26159;&#38750;&#30830;&#23450;&#39034;&#24207;&#65288; indeterminably-sequenced &#65289;&#30340;&#65306;&#23427;&#20204;&#21487;&#20197;&#20197;&#20219;&#24847;&#39034;&#24207;&#36827;&#34892;&#65292;&#20294;&#19981;&#21487;&#37325;&#21472;&#65306;&#35201;&#20040;&#26159; A &#23558;&#22312; B &#20043;&#21069;&#23436;&#25104;&#65292;&#35201;&#20040;&#26159; B &#22312; A &#20043;&#21069;&#23436;&#25104;&#12290;&#39034;&#24207;&#21487;&#20197;&#22312;&#30456;&#21516;&#34920;&#36798;&#24335;&#30340;&#19979;&#27425;&#27714;&#20540;&#21069;&#30456;&#21453;&#12290;</li>
</ul>
</li>
</ul>
</td>
<td><span class="t-mark-rev t-since-c11">(C11 &#36215;)</span></td>
</tr>
</table>
<h3><span class="mw-headline" id=".E8.A7.84.E5.88.99">&#35268;&#21017;</span></h3>
<div class="t-li1"><span class="t-li">1)</span> &#22312;&#25152;&#26377;&#20989;&#25968;&#21442;&#25968;&#21644;&#20989;&#25968;&#25351;&#20195;&#22120;&#30340;&#27714;&#20540;&#21518;&#65292;&#23454;&#38469;&#35843;&#29992;&#20989;&#25968;&#21069;&#65292;&#26377;&#19968;&#20010;&#24207;&#21015;&#28857;&#12290;</div>
<div class="t-li1"><span class="t-li">2)</span> &#22312;&#19979;&#20363;&#20108;&#20803;&#36816;&#31639;&#31526;&#30340;&#31532;&#19968;&#65288;&#24038;&#65289;&#36816;&#31639;&#25968;&#27714;&#20540;&#21518;&#65292;&#31532;&#20108;&#65288;&#21491;&#65289;&#36816;&#31639;&#25968;&#27714;&#20540;&#21069;&#65292;&#26377;&#19968;&#20010;&#24207;&#21015;&#28857;&#65306; <code>&amp;&amp;</code> &#65288;&#36923;&#36753;&#19982;&#65289;&#12289; <code>||</code> &#65288;&#36923;&#36753;&#25110;&#65289;&#65292;&#21450; <code>,</code> &#65288;&#36887;&#21495;&#65289;&#12290;</div>
<div class="t-li1"><span class="t-li">3)</span> &#22312;&#26465;&#20214;&#36816;&#31639;&#31526; <code>?:</code> &#30340;&#31532;&#19968;&#65288;&#24038;&#65289;&#36816;&#31639;&#25968;&#27714;&#20540;&#21518;&#65292;&#31532;&#20108;&#25110;&#31532;&#19977;&#36816;&#31639;&#25968;&#65288;&#26080;&#35770;&#20309;&#32773;&#34987;&#27714;&#20540;&#65289;&#21069;&#65292;&#26377;&#19968;&#20010;&#24207;&#21015;&#28857;&#12290;</div>
<div class="t-li1"><span class="t-li">4)</span> &#22312;&#23436;&#25972;&#34920;&#36798;&#24335;&#65288;&#38750;&#23376;&#34920;&#36798;&#24335;&#30340;&#34920;&#36798;&#24335;&#65306;&#20856;&#22411;&#30340;&#26159;&#20197;&#20998;&#21495;&#20026;&#32467;&#23614;&#32773;&#25110; if/switch/while/do &#30340;&#25511;&#21046;&#35821;&#21477;&#65289;&#30340;&#27714;&#20540;&#21518;&#65292;&#19979;&#20010;&#23436;&#25972;&#34920;&#36798;&#24335;&#21069;&#65292;&#26377;&#19968;&#20010;&#24207;&#21015;&#28857;&#12290;</div>
<table class="t-rev-begin">
<tr class="t-rev t-since-c99">
<td>
<div class="t-li1"><span class="t-li">5)</span> &#22312;&#23436;&#25972;&#22768;&#26126;&#22120;&#30340;&#32467;&#23614;&#65292;&#26377;&#19968;&#20010;&#24207;&#21015;&#28857;&#12290;</div>
<div class="t-li1"><span class="t-li">6)</span> &#22312;&#32039;&#25509;&#24211;&#20989;&#25968;&#36820;&#22238;&#21069;&#65292;&#26377;&#19968;&#20010;&#24207;&#21015;&#28857;&#12290;</div>
<div class="t-li1"><span class="t-li">7)</span> &#22312;&#26684;&#24335;&#21270; I/O &#20013;&#65292;&#20851;&#32852;&#21040;&#27599;&#20010;&#36716;&#25442;&#25351;&#23450;&#31526;&#30340;&#21160;&#20316;&#21518;&#65292;&#26377;&#19968;&#20010;&#24207;&#21015;&#28857;&#65288;&#29305;&#21035;&#26159; <span class="t-lc"><a href="c-io-fscanf.html">scanf</a></span> &#20889;&#20837;&#21516;&#19968;&#21464;&#37327;&#30340;&#19981;&#21516;&#22495;&#65292; <span class="t-lc"><a href="c-io-fprintf.html">printf</a></span> &#35835;&#21462;&#24182;&#20197;&#22810;&#20110;&#19968;&#27425;&#20351;&#29992; <span class="t-c"><span class="mw-geshi c source-c"><span class="sy2">%</span>n</span></span> &#20462;&#25913;&#21516;&#19968;&#21464;&#37327;&#26159;&#33391;&#24335;&#30340;&#65289;&#12290;</div>
<div class="t-li1"><span class="t-li">8)</span> &#22312;&#27599;&#27425;&#36890;&#36807;&#24211;&#20989;&#25968; <span class="t-lc"><a href="c-algorithm-qsort.html">qsort</a></span> &#21644; <span class="t-lc"><a href="c-algorithm-bsearch.html">bsearch</a></span> &#35843;&#29992;&#27604;&#36739;&#20989;&#25968;&#21069;&#21644;&#32039;&#38543;&#20854;&#21518;&#26377;&#24207;&#21015;&#28857;&#65292;&#22312; <span class="t-lc"><a href="c-algorithm-qsort.html">qsort</a></span> &#35843;&#29992;&#27604;&#36739;&#20989;&#25968;&#21644;&#31227;&#21160;&#23545;&#35937;&#20043;&#38388;&#20063;&#26377;&#24207;&#21015;&#28857;&#12290;</div>
</td>
<td><span class="t-mark-rev t-since-c99">(C99 &#36215;)</span></td>
</tr>
<tr class="t-rev t-since-c11">
<td>
<div class="t-li1"><span class="t-li">9)</span> &#23646;&#20110;&#36816;&#31639;&#31526;&#30340;&#36816;&#31639;&#25968;&#30340;&#20540;&#35745;&#31639;&#65288;&#20294;&#38750;&#21103;&#25928;&#24212;&#65289;&#20808;&#24207;&#20110;&#36816;&#31639;&#31526;&#30340;&#20540;&#35745;&#31639;&#65288;&#20294;&#38750;&#20854;&#21103;&#25928;&#24212;&#65289;&#12290;</div>
<div class="t-li1"><span class="t-li">10)</span> &#30452;&#25509;&#36171;&#20540;&#36816;&#31639;&#31526;&#19982;&#25152;&#26377;&#22797;&#21512;&#36171;&#20540;&#36816;&#31639;&#31526;&#30340;&#21103;&#25928;&#24212;&#65288;&#20462;&#25913;&#24038;&#21442;&#25968;&#65289;&#21518;&#24207;&#20110;&#24038;&#21491;&#21442;&#25968;&#30340;&#20540;&#35745;&#31639;&#65288;&#20294;&#38750;&#20854;&#21103;&#25928;&#24212;&#65289;&#12290;</div>
<div class="t-li1"><span class="t-li">11)</span> &#21518;&#33258;&#22686;&#21644;&#21518;&#33258;&#20943;&#36816;&#31639;&#31526;&#30340;&#20540;&#35745;&#31639;&#20808;&#24207;&#20110;&#20854;&#21103;&#25928;&#24212;&#12290;</div>
<div class="t-li1"><span class="t-li">12)</span> &#26082;&#38750;&#20808;&#24207;&#20110;&#20134;&#38750;&#21518;&#24207;&#20110;&#21478;&#19968;&#20989;&#25968;&#35843;&#29992;&#30340;&#20989;&#25968;&#35843;&#29992;&#26159;&#38750;&#30830;&#23450;&#39034;&#24207;&#30340;&#65288;&#26500;&#25104;&#19981;&#21516;&#20989;&#25968;&#35843;&#29992;&#30340; CPU &#25351;&#20196;&#19981;&#21487;&#33021;&#20132;&#38169;&#65292;&#21363;&#20351;&#20989;&#25968;&#34987;&#20869;&#32852;&#65289;&#12290;</div>
<div class="t-li1"><span class="t-li">13)</span> &#22312;<a href="c-language-initialization.html">&#21021;&#22987;&#21270;&#22120;</a>&#21015;&#34920;&#34920;&#36798;&#24335;&#20013;&#65292;&#25152;&#26377;&#27714;&#20540;&#37117;&#26159;&#38750;&#30830;&#23450;&#39034;&#24207;&#30340;</div>
<div class="t-li1"><span class="t-li">14)</span> &#32771;&#34385;&#21040;&#38750;&#30830;&#23450;&#39034;&#24207;&#30340;&#20989;&#25968;&#35843;&#29992;&#65292;&#22797;&#21512;&#36171;&#20540;&#36816;&#31639;&#31526;&#65292;&#21450;&#33258;&#22686;&#20943;&#36816;&#31639;&#31526;&#30340;&#21069;&#21518;&#32512;&#24418;&#24335;&#37117;&#26159;&#21333;&#29420;&#27714;&#20540;&#12290;</div>
</td>
<td><span class="t-mark-rev t-since-c11">(C11 &#36215;)</span></td>
</tr>
</table>
<h3><span class="mw-headline" id=".E6.9C.AA.E5.AE.9A.E4.B9.89.E8.A1.8C.E4.B8.BA">&#26410;&#23450;&#20041;&#34892;&#20026;</span></h3>
<div class="t-li1"><span class="t-li">1)</span> &#33509;&#23545;&#19968;&#20010;&#26631;&#37327;&#23545;&#35937;&#30340;&#21103;&#25928;&#24212;&#19982;&#21478;&#19968;&#20010;&#23545;&#21516;&#19968;&#26631;&#37327;&#23545;&#35937;&#30340;&#21103;&#25928;&#24212;&#30456;&#23545;&#26080;&#39034;&#24207;&#65292;&#21017;<a href="c-language-behavior.html#UB_.E4.B8.8E.E4.BC.98.E5.8C.96">&#34892;&#20026;&#26410;&#23450;&#20041;</a>&#12290;
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="c source-c">
<pre class="de1">i <span class="sy1">=</span> <span class="sy2">++</span>i <span class="sy2">+</span> i<span class="sy2">++</span><span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;</span>
i <span class="sy1">=</span> i<span class="sy2">++</span> <span class="sy2">+</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;</span>
f<span class="br0">(</span><span class="sy2">++</span>i, <span class="sy2">++</span>i<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;</span>
f<span class="br0">(</span>i <span class="sy1">=</span> <span class="sy2">-</span><span class="nu0">1</span>, i <span class="sy1">=</span> <span class="sy2">-</span><span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;</span></pre></div>
</div>
</div>
<div class="t-li1"><span class="t-li">2)</span> &#33509;&#19968;&#20010;&#26631;&#37327;&#23545;&#35937;&#19978;&#30340;&#21103;&#25928;&#24212;&#19982;&#21478;&#19968;&#20010;&#20351;&#29992;&#21516;&#19968;&#26631;&#37327;&#23545;&#35937;&#20043;&#20540;&#30340;&#20540;&#35745;&#31639;&#30456;&#23545;&#26080;&#39034;&#24207;&#65292;&#21017;&#34892;&#20026;&#26410;&#23450;&#20041;&#12290;
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="c source-c">
<pre class="de1">f<span class="br0">(</span>i, i<span class="sy2">++</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;</span>
a<span class="br0">[</span>i<span class="br0">]</span> <span class="sy1">=</span> i<span class="sy2">++</span><span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;</span></pre></div>
</div>
</div>
<div class="t-li1"><span class="t-li">3)</span> &#21482;&#35201;&#33267;&#23569;&#19968;&#20010;&#23376;&#34920;&#36798;&#24335;&#30340;&#25490;&#24207;&#23481;&#35768;&#36825;&#31181;&#26080;&#39034;&#24207;&#21103;&#25928;&#24212;&#65292;&#23601;&#24212;&#29992;&#19978;&#36848;&#35268;&#21017;&#12290;</div>
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">&#21442;&#38405;</span></h3>
<p><a href="c-language-operator_precedence.html">&#36816;&#31639;&#31526;&#20248;&#20808;&#32423;</a>&#65292;&#23450;&#20041;&#33258;&#28304;&#20195;&#30721;&#34920;&#31034;&#26500;&#24314;&#34920;&#36798;&#24335;&#30340;&#26041;&#24335;&#12290;</p>
<table class="t-dsc-begin"></table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>