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

164 lines
13 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>&#27867;&#22411;&#36873;&#25321;</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_generic skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#27867;&#22411;&#36873;&#25321;</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>&#25552;&#20379;&#19968;&#31181;&#22522;&#20110;&#25511;&#21046;&#34920;&#36798;&#24335;&#30340;&#31867;&#22411;&#65292;&#22312;&#32534;&#35793;&#26102;&#36873;&#25321;&#25968;&#20010;&#34920;&#36798;&#24335;&#20043;&#19968;&#30340;&#26041;&#27861;&#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><code><b>_Generic</b></code> <code><b>(</b></code> <span class="t-spar">&#25511;&#21046;&#34920;&#36798;&#24335;</span> <code><b>,</b></code> <span class="t-spar">&#20851;&#32852;&#21015;&#34920;</span> <code><b>)</b></code></td>
<td class="t-sdsc-nopad"></td>
<td><span class="t-mark-rev t-since-c11">(C11 &#36215;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<p>&#20854;&#20013; <span class="t-spar">&#20851;&#32852;&#21015;&#34920;</span> &#26159;&#36887;&#21495;&#20998;&#38548;&#30340;&#20851;&#32852;&#21015;&#34920;&#65292;&#27599;&#20010;&#20851;&#32852;&#25317;&#26377;&#35821;&#27861;&#65306;</p>
<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">&#31867;&#22411;&#21517;</span> <code><b>:</b></code> <span class="t-spar">&#34920;&#36798;&#24335;</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>
<tr class="t-sdsc">
<td class="t-sdsc-nopad"><code><b>default</b></code> <code><b>:</b></code> <span class="t-spar">&#34920;&#36798;&#24335;</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>
<p>&#20854;&#20013;</p>
<table class="t-par-begin">
<tr class="t-par">
<td><span class="t-spar">&#31867;&#22411;&#21517;</span></td>
<td>-</td>
<td>&#20219;&#20309;&#23436;&#25972;&#30340;&#38750;&#21487;&#21464;&#20462;&#25913;&#30340;<a href="c-language-types.html">&#23545;&#35937;&#31867;&#22411;</a>&#65288;&#21363;&#26082;&#38750; VLA &#20134;&#38750;&#25351;&#21521; VLA &#30340;&#25351;&#38024;&#65289;&#12290;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#20851;&#32852;&#21015;&#34920;</span></td>
<td>-</td>
<td>&#20219;&#20309;&#34920;&#36798;&#24335;&#65288;&#38500;&#20102;<a href="c-language-operator_other.html#.E9.80.97.E5.8F.B7.E8.BF.90.E7.AE.97.E7.AC.A6">&#36887;&#21495;&#36816;&#31639;&#31526;</a>&#65289;&#65292;&#33509;&#19981;&#20351;&#29992; <code>default</code> &#20851;&#32852;&#65292;&#21017;&#20854;&#31867;&#22411;&#24517;&#39035;&#19982; <span class="t-spar">&#31867;&#22411;&#21517;</span> &#20043;&#19968;&#20860;&#23481;&#65292;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#34920;&#36798;&#24335;</span></td>
<td>-</td>
<td>&#20219;&#20309;&#31867;&#22411;&#21644;&#20540;&#31867;&#21035;&#30340;&#34920;&#36798;&#24335;&#65288;&#38500;&#20102;<a href="c-language-operator_other.html#.E9.80.97.E5.8F.B7.E8.BF.90.E7.AE.97.E7.AC.A6">&#36887;&#21495;&#36816;&#31639;&#31526;</a>&#65289;</td>
</tr>
</table>
<p><span class="t-spar">&#20851;&#32852;&#21015;&#34920;</span> &#20013;&#30340;&#20219;&#24847;&#20108;&#20010; <span class="t-spar">&#31867;&#22411;&#21517;</span> &#19981;&#33021;&#25351;&#23450;<a href="c-language-types.html#.E5.85.BC.E5.AE.B9.E7.B1.BB.E5.9E.8B">&#20860;&#23481;&#31867;&#22411;</a>&#12290;&#20351;&#29992;&#20851;&#38190;&#35789; <code>default</code> &#30340;&#20851;&#32852;&#21482;&#33021;&#26377;&#19968;&#20010;&#12290;&#33509;&#19981;&#20351;&#29992; <code>default</code> &#65292;&#19988;&#26080;&#19968; <span class="t-spar">&#31867;&#22411;&#21517;</span> &#19982;&#25511;&#21046;&#34920;&#36798;&#24335;&#31867;&#22411;&#20860;&#23481;&#65292;&#21017;&#31243;&#24207;&#26080;&#27861;&#32534;&#35793;&#12290;</p>
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">&#35299;&#37322;</span></h3>
<p>&#39318;&#20808;&#65292; <span class="t-spar">&#25511;&#21046;&#34920;&#36798;&#24335;</span> &#30340;&#31867;&#22411;&#32463;&#21382;<a href="c-language-conversion.html#.E5.B7.A6.E5.80.BC.E8.BD.AC.E6.8D.A2">&#24038;&#20540;&#36716;&#25442;</a>&#12290;&#21482;&#22312;&#31867;&#22411;&#22495;&#20013;&#36827;&#34892;&#36716;&#25442;&#65306;&#23427;&#33293;&#24323;&#39030;&#23618; cvr &#38480;&#23450;&#31526;&#21644;&#21407;&#23376;&#23646;&#24615;&#65292;&#24182;&#24212;&#29992;&#25968;&#32452;&#21040;&#25351;&#38024;/&#20989;&#25968;&#21040;&#25351;&#38024;&#21464;&#25442;&#21040;&#25511;&#21046;&#34920;&#36798;&#24335;&#30340;&#31867;&#22411;&#65292;&#32780;&#19981;&#23454;&#20363;&#21270;&#20219;&#20309;&#21103;&#25928;&#24212;&#25110;&#35745;&#31639;&#20219;&#20309;&#20540;&#12290;</p>
<p>&#23558;&#36716;&#25442;&#21518;&#30340;&#31867;&#22411;&#19982;&#26469;&#33258;&#20851;&#32852;&#21015;&#34920;&#20013;&#30340; <span class="t-spar">&#31867;&#22411;&#21517;</span> &#27604;&#36739;&#12290;</p>
<p>&#33509;&#20854;&#31867;&#22411;&#19982;&#20851;&#32852;&#20043;&#19968;&#30340; <span class="t-spar">&#31867;&#22411;&#21517;</span> <a href="c-language-types.html#.E5.85.BC.E5.AE.B9.E7.B1.BB.E5.9E.8B">&#20860;&#23481;</a>&#65292;&#21017;&#27867;&#22411;&#36873;&#25321;&#30340;&#31867;&#22411;&#12289;&#20540;&#21450;<a href="c-language-value_category.html">&#20540;&#31867;&#21035;</a>&#23601;&#26159;&#20986;&#29616;&#20110;&#35813; <span class="t-spar">&#31867;&#22411;&#21517;</span> &#20882;&#21495;&#21518;&#30340;&#34920;&#36798;&#24335;&#30340;&#31867;&#22411;&#12289;&#20540;&#21450;&#20540;&#31867;&#21035;&#12290;</p>
<p>&#33509;&#26080;&#19968; <span class="t-spar">&#31867;&#22411;&#21517;</span> &#30340;&#31867;&#22411;&#19982; <span class="t-spar">&#25511;&#21046;&#34920;&#36798;&#24335;</span> &#20860;&#23481;&#65292;&#19988;&#25552;&#20379;&#20102; <code>default</code> &#20851;&#32852;&#65292;&#21017;&#27867;&#22411;&#30340;&#31867;&#22411;&#12289;&#20540;&#21450;&#20540;&#31867;&#21035;&#23601;&#26159;&#20986;&#29616;&#20110; <code>default&nbsp;:</code> &#26631;&#21495;&#21518;&#30340;&#34920;&#36798;&#24335;&#30340;&#31867;&#22411;&#12289;&#20540;&#21450;&#20540;&#31867;&#21035;&#12290;</p>
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">&#27880;&#35299;</span></h3>
<p>&#20915;&#19981;&#27714;&#20540; <span class="t-spar">&#25511;&#21046;&#34920;&#36798;&#24335;</span> &#21644;&#26410;&#34987;&#36873;&#25321;&#30340;&#36873;&#39033;&#20013;&#30340; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#12290;</p>
<p>&#22240;&#20026;&#24038;&#20540;&#36716;&#25442;&#65292; <span class="t-c"><span class="mw-geshi c source-c"><span class="st0">&quot;abc&quot;</span></span></span> &#21305;&#37197; <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">char</span><span class="sy2">*</span></span></span> &#32780;&#38750; <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">char</span><span class="br0">[</span><span class="nu0">4</span><span class="br0">]</span></span></span> &#65292; <span class="t-c"><span class="mw-geshi c source-c"><span class="br0">(</span><span class="kw4">int</span> <span class="kw4">const</span><span class="br0">)</span><span class="br0">{</span><span class="nu0">0</span><span class="br0">}</span></span></span> &#21305;&#37197; <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">int</span></span></span> &#32780;&#38750; <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">const</span> <span class="kw4">int</span></span></span> &#12290;</p>
<p>&#27867;&#22411;&#36873;&#25321;&#20013;&#30340; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#20801;&#35768;&#20219;&#20309;<a href="c-language-value_category.html">&#20540;&#31867;&#21035;</a>&#65292;&#21547;&#20989;&#25968;&#25351;&#20195;&#22120;&#21450; void &#34920;&#36798;&#24335;&#65292;&#32780;&#19988;&#33509;&#23427;&#21463;&#21040;&#36873;&#25321;&#65292;&#21017;&#27867;&#22411;&#36873;&#25321;&#33258;&#36523;&#25317;&#26377;&#30456;&#21516;&#30340;&#20540;&#31867;&#21035;&#12290;</p>
<p>C99 &#20013;&#24341;&#20837;&#30340;&#26469;&#33258; <code>&lt;tgmath.h&gt;</code> &#30340;<a href="c-numeric-tgmath.html">&#27867;&#22411;&#25968;&#23398;&#23439;</a>&#65292;&#26366;&#26159;&#36890;&#36807;&#32534;&#35793;&#22120;&#38480;&#23450;&#30340;&#34892;&#20026;&#23454;&#29616;&#30340;&#12290; C11 &#25152;&#24341;&#20837;&#30340;&#27867;&#22411;&#36873;&#25321;&#65292;&#32473;&#20104;&#31243;&#24207;&#21592;&#20889;&#30456;&#20284;&#30340;&#31867;&#22411;&#20381;&#36182;&#20195;&#30721;&#30340;&#33021;&#21147;&#12290;</p>
<p>&#27867;&#22411;&#36873;&#25321;&#31867;&#20284; C++ &#20013;&#30340;&#37325;&#36733;&#65288;&#22312;&#32534;&#35793;&#26102;&#22522;&#20110;&#21442;&#25968;&#31867;&#22411;&#36873;&#25321;&#25968;&#20010;&#20989;&#25968;&#20043;&#19968;&#65289;&#12290;&#38500;&#20102;&#23427;&#22312;&#20219;&#24847;&#34920;&#36798;&#24335;&#20043;&#38388;&#36873;&#25321;&#12290;</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-_Generic.html"><tt>_Generic</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="co2">#include &lt;math.h&gt;</span>
<span class="co1">// tgmath.h &#23439; cbrt &#30340;&#21487;&#33021;&#23454;&#29616;</span>
<span class="co2">#define cbrt(X) _Generic((X), \
long double: cbrtl, \
default: cbrt, \
float: cbrtf \
)(X)</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="kw4">double</span> x <span class="sy1">=</span> <span class="nu16">8.0</span><span class="sy4">;</span>
<span class="kw4">const</span> <span class="kw4">float</span> y <span class="sy1">=</span> <span class="nu16">3.375</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;cbrt(8.0) = %f<span class="es1">\n</span>&quot;</span>, <a href="c-numeric-math-cbrt.html"><span class="kw666">cbrt</span></a><span class="br0">(</span>x<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#36873;&#25321;&#40664;&#35748;&#30340; cbrt</span>
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;cbrtf(3.375) = %f<span class="es1">\n</span>&quot;</span>, <a href="c-numeric-math-cbrt.html"><span class="kw666">cbrt</span></a><span class="br0">(</span>y<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#23558; const float &#36716;&#25442;&#25104; float&#65292;</span>
<span class="co1">// &#28982;&#21518;&#36873;&#25321; cbrtf</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">cbrt(8.0) = 2.000000
cbrtf(3.375) = 1.500000</pre></div>
</div>
</div>
<h3><span class="mw-headline" id=".E7.BC.BA.E9.99.B7.E6.8A.A5.E5.91.8A">&#32570;&#38519;&#25253;&#21578;</span></h3>
<p>&#19979;&#21015;&#26356;&#25913;&#34892;&#20026;&#30340;&#32570;&#38519;&#25253;&#21578;&#36861;&#28335;&#22320;&#24212;&#29992;&#20110;&#20197;&#21069;&#20986;&#29256;&#30340; C &#26631;&#20934;&#12290;</p>
<table class="dsctable" style="font-size:0.8em">
<tr>
<th>DR</th>
<th>&#24212;&#29992;&#20110;</th>
<th>&#20986;&#29256;&#26102;&#30340;&#34892;&#20026;</th>
<th>&#27491;&#30830;&#34892;&#20026;</th>
</tr>
<tr>
<td><a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2396.htm#dr_481">DR 481</a></td>
<td>C11</td>
<td>&#26410;&#25351;&#23450;&#25511;&#21046;&#34920;&#36798;&#24335;&#26159;&#21542;&#32463;&#21382;&#24038;&#20540;&#36716;&#25442;</td>
<td>&#32463;&#21382;</td>
</tr>
</table>
<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.5.1.1 Generic selection (p: 56-57)</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.5.1.1 Generic selection (p: 78-79)</li>
</ul>
</dd>
</dl>
</div>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>