305 lines
14 KiB
HTML
305 lines
14 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-cpp_freestanding 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="cpp.html">cpp</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<p>C++ 标准定义了两种实现:<i><b>有宿主</b> (hosted)</i> 与<i><b>独立</b> (freestanding)</i> 实现。 C++ 标准对<i>有宿主</i>实现所规定的标准库头文件集合比对<i>独立</i>实现所规定的大很多。<i>独立</i>实现中程序可能在没有操作系统的情况下运行。</p>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-cxx11">
|
|
<td>
|
|
<p>宏 <code>__STDC_HOSTED__</code> 对宿主实现预定义为 <code>1</code> ,对独立实现为 <code>0</code> 。</p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-cxx11">
|
|
<td>
|
|
<h3><span class="mw-headline" id=".E9.92.88.E5.AF.B9.E5.A4.9A.E7.BA.BF.E7.A8.8B.E6.89.A7.E8.A1.8C.E4.B8.8E.E6.95.B0.E6.8D.AE.E7.AB.9E.E4.BA.89.E7.9A.84.E8.A7.84.E5.AE.9A">针对<a href="cpp-language-memory_model.html">多线程执行与数据竞争</a>的规定</span></h3>
|
|
<table cellpadding="8">
|
|
<tr>
|
|
<th><i>独立</i></th>
|
|
<th><i>有宿主</i></th>
|
|
</tr>
|
|
<tr>
|
|
<td><i>独立</i>实现下,程序能否拥有多于一个<a href="cpp-thread.html">执行线程</a>由实现定义。</td>
|
|
<td><i>有宿主</i>实现下, C++ 程序可以拥有多于一个同时运行的<a href="cpp-thread.html">线程</a>。</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E9.92.88.E5.AF.B9_main_.E5.87.BD.E6.95.B0.E7.9A.84.E8.A6.81.E6.B1.82">针对 <a href="cpp-language-main_function.html"><tt>main</tt></a> 函数的要求</span></h3>
|
|
<table cellpadding="8|">
|
|
<tr>
|
|
<th><i>独立</i></th>
|
|
<th><i>有宿主</i></th>
|
|
</tr>
|
|
<tr>
|
|
<td><i>独立</i>实现中,是否要求程序定义 <a href="cpp-language-main_function.html"><tt>main</tt></a> 函数是由实现定义的。启动与终止过程是由实现定义的;启动过程中包含执行具有静态<a href="cpp-language-storage_duration.html">存储期</a>的<a href="cpp-language-scope.html#.E5.91.BD.E5.90.8D.E7.A9.BA.E9.97.B4.E4.BD.9C.E7.94.A8.E5.9F.9F">命名空间作用域</a>对象的<a href="cpp-language-constructor.html">构造函数</a>;终止过程中包含执行具有静态<a href="cpp-language-storage_duration.html">存储期</a>的对象的<a href="cpp-language-destructor.html">析构函数</a>。</td>
|
|
<td><i>有宿主</i>实现中,程序必须包含一个名为 <a href="cpp-language-main_function.html"><tt>main</tt></a> 的全局函数。程序执行时启动一个主<a href="cpp-thread.html">执行线程</a>,在其中调用 <code>main</code> 函数,并且具有静态<a href="cpp-language-storage_duration.html">存储期</a>的变量将在该线程中被初始化和销毁。</td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E9.92.88.E5.AF.B9.E6.A0.87.E5.87.86.E5.BA.93.E5.A4.B4.E6.96.87.E4.BB.B6.E7.9A.84.E8.A7.84.E5.AE.9A">针对<a href="cpp-header.html">标准库头文件</a>的规定</span></h3>
|
|
<p><i>独立</i>实现拥有由实现定义的头文件集合。此集合至少包含下表中的头文件:</p>
|
|
<table class="wikitable">
|
|
<caption style="padding:6px;"><i>独立</i>实现所规定的头文件</caption>
|
|
<tr>
|
|
<td>类型</td>
|
|
<td><a href="cpp-header-cstddef.html"><tt><cstddef></tt></a></td>
|
|
</tr>
|
|
<tr>
|
|
<td>实现的属性</td>
|
|
<td><a href="cpp-header-limits.html"><tt><limits></tt></a><br />
|
|
<a href="cpp-header-cfloat.html"><tt><cfloat></tt></a> <a href="cpp-header-climits.html"><tt><climits></tt></a> <span class="t-mark-rev t-since-cxx11">(C++11 起)</span><br />
|
|
<a href="cpp-header-version.html"><tt><version></tt></a> <span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>整数类型</td>
|
|
<td><a href="cpp-header-cstdint.html"><tt><cstdint></tt></a> <span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>启动与终止</td>
|
|
<td><a href="cpp-header-cstdlib.html"><tt><cstdlib></tt></a> <span class="t-mark">(部分)</span><sup id="cite_ref-1" class="reference"><a href="cpp-freestanding.html#cite_note-1">[1]</a></sup></td>
|
|
</tr>
|
|
<tr>
|
|
<td>动态内存管理</td>
|
|
<td><a href="cpp-header-new.html"><tt><new></tt></a></td>
|
|
</tr>
|
|
<tr>
|
|
<td>类型鉴别</td>
|
|
<td><a href="cpp-header-typeinfo.html"><tt><typeinfo></tt></a></td>
|
|
</tr>
|
|
<tr>
|
|
<td>源文件位置</td>
|
|
<td><a href="cpp-header-source_location.html"><tt><source_location></tt></a> <span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>异常处理</td>
|
|
<td><a href="cpp-header-exception.html"><tt><exception></tt></a></td>
|
|
</tr>
|
|
<tr>
|
|
<td>初始化器列表</td>
|
|
<td><a href="cpp-header-initializer_list.html"><tt><initializer_list></tt></a> <span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>比较</td>
|
|
<td><a href="cpp-header-compare.html"><tt><compare></tt></a> <span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>协程支持</td>
|
|
<td><a href="cpp-header-coroutine.html"><tt><coroutine></tt></a> <span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>其他运行时支持</td>
|
|
<td><a href="cpp-header-cstdarg.html"><tt><cstdarg></tt></a></td>
|
|
</tr>
|
|
<tr>
|
|
<td>基础库概念</td>
|
|
<td><a href="cpp-header-concepts.html"><tt><concepts></tt></a> <span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>类型特征</td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a> <span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>位操作</td>
|
|
<td><a href="cpp-header-bit.html"><tt><bit></tt></a> <span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>原子类型</td>
|
|
<td><a href="cpp-header-atomic.html"><tt><atomic></tt></a> <span class="t-mark-rev t-since-cxx11">(C++11 起)</span><sup id="cite_ref-2" class="reference"><a href="cpp-freestanding.html#cite_note-2">[2]</a></sup></td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td><a href="cpp-header-ciso646.html"><tt><ciso646></tt></a> <span class="t-mark-rev t-since-cxx11">(C++11 起)</span><span class="t-mark-rev t-until-cxx20">(C++20 前)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>已弃用的头文件</td>
|
|
<td><a href="cpp-header-cstdalign.html"><tt><cstdalign></tt></a> <a href="cpp-header-cstdbool.html"><tt><cstdbool></tt></a> <span class="t-mark-rev t-since-cxx11">(C++11 起)</span><span class="t-mark-rev t-until-cxx20">(C++20 前)</span></td>
|
|
</tr>
|
|
</table>
|
|
<ol class="references">
|
|
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="cpp-freestanding.html#cite_ref-1">↑</a></span> <span class="reference-text">头文件 <code><cstdlib></code> 的受支持版本应当至少声明函数 <span class="t-lc"><a href="cpp-utility-program-abort.html">std::abort</a></span> 、 <span class="t-lc"><a href="cpp-utility-program-atexit.html">std::atexit</a></span> 、 <span class="t-lc"><a href="cpp-utility-program-exit.html">std::exit</a></span> <span class="t-rev-inl t-since-cxx11"><span>、 <span class="t-lc"><a href="cpp-utility-program-at_quick_exit.html">std::at_quick_exit</a></span> 及 <span class="t-lc"><a href="cpp-utility-program-quick_exit.html">std::quick_exit</a></span></span> <span><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></span></span> 。</span></li>
|
|
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="cpp-freestanding.html#cite_ref-2">↑</a></span> <span class="reference-text"><span class="t-rev-inl t-since-cxx20"><span>始终免锁的整数原子类型的支持,以及类型别名 <span class="t-lc">std::atomic_signed_lock_free</span> 与 <span class="t-lc">std::atomic_unsigned_lock_free</span> 是否存在在自立实现是实现定义的。</span> <span><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></span></span></span></li>
|
|
</ol>
|
|
<h3><span class="mw-headline" id=".E5.BC.95.E7.94.A8">引用</span></h3>
|
|
<div class="t-ref-std-c++20">
|
|
<ul>
|
|
<li>C++20 标准(ISO/IEC 14882:2020):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>4.1 Implementation compliance [intro.compliance](p: 7)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>6.9.2 Multi-threaded executions and data races [intro.multithread](p: 77)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>6.9.3.1 main function [basic.start.main](p: 82)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>16.5.1.3 Freestanding implementations [compliance](p: 470)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="t-ref-std-c++17">
|
|
<ul>
|
|
<li>C++17 标准(ISO/IEC 14882:2017):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>4.1 Implementation compliance [intro.compliance](p: 5)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>4.7 Multi-threaded executions and data races [intro.multithread](p: 15)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>6.6.1 main function [basic.start.main](p: 66)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>20.5.1.3 Freestanding implementations [compliance](p: 458)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="t-ref-std-c++14">
|
|
<ul>
|
|
<li>C++14 标准(ISO/IEC 14882:2014):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>1.4 Implementation compliance [intro.compliance](p: 5)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>1.10 Multi-threaded executions and data races [intro.multithread](p: 11)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>3.6.1 Main function [basic.start.main](p: 62)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>17.6.1.3 Freestanding implementations [compliance](p: 441)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="t-ref-std-c++11">
|
|
<ul>
|
|
<li>C++11 标准(ISO/IEC 14882:2011):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>1.4 Implementation compliance [intro.compliance](p: 5)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>1.10 Multi-threaded executions and data races [intro.multithread](p: 11)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>3.6.1 Main function [basic.start.main](p: 58)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>17.6.1.3 Freestanding implementations [compliance](p: 408)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="t-ref-std-c++03">
|
|
<ul>
|
|
<li>C++03 标准(ISO/IEC 14882:2003):</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>1.4 Implementation compliance [intro.compliance](p: 3)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>3.6.1 Main function [basic.start.main](p: 43)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>17.4.1.3 Freestanding implementations [lib.compliance](p: 326)</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>
|