Ez a fejezet nem új nyelvi elemet tanít, hanem lefedettségi térképet ad: melyik standard fejléc melyik kurzusrészhez visz vissza, és hol húzódik a határ a szabványos könyvtár és a harmadik féltől származó ökoszisztéma között. A „standard fejléc” itt pontos definíció szerint az ISO C vagy ISO C++ szabvány által meghatározott header, amelynek deklarációit a kiválasztott implementáció hosted vagy freestanding módban biztosítja. Elérhetősége nem azonos a teljes funkcionális támogatással: a nyelvi mód, a könyvtár verziója, a hosted/freestanding választás és az implementáció dokumentációja együtt dönt. Ezért a fejléc jelenléte helyett lehetőleg feature-test makrót vagy fordítási próbát használj. A freestanding korlátokat Freestanding, embedded, kernel és GPU irányok (46.3) tárgyalta; a szövegkódolás és random részletei Szövegkódolás, locale és random (32.5), a szinkronizációs primitívek semaphore, latch, barrier és szinkron stream (34.5) alatt találhatók.
A C17 hosted könyvtára 29 szabványos fejlécből áll. Az alábbi csoportosítás index, nem helyettesíti a fejezetek szerződéseit.
| Terület | C17 fejlécek |
|---|---|
| Diagnosztika | <assert.h>, <errno.h> |
| Karakter és szöveg | <ctype.h>, <string.h>,
<wchar.h>, <wctype.h>,
<uchar.h>, <locale.h> |
| Matematika | <complex.h>, <fenv.h>,
<float.h>, <math.h>,
<tgmath.h>, <limits.h> |
| I/O és általános eszközök | <stdio.h>, <stdlib.h>,
<stddef.h>, <stdint.h>,
<inttypes.h>, <stdarg.h>,
<stdbool.h>, <stdalign.h>,
<stdnoreturn.h>, <iso646.h> |
| Vezérlés, jel, idő | <setjmp.h>, <signal.h>,
<time.h> |
| Konkurencia | <stdatomic.h>,
<threads.h> |
A <threads.h> és a
<stdatomic.h> támogatása implementációfüggő; a C11
threads különösen gyakran opcionális. A C23 két új fejlécet hoz:
<stdbit.h> a bitkezelő makrókhoz,
<stdckdint.h> az ellenőrzött egész aritmetikához. A
C23 egyetlen C17-es fejlécet sem szüntet meg, de háromnak a tartalma
változik, mert a bool, true,
false, alignas, alignof kulcsszó
lett: a <stdbool.h> már csak az obsolescent
__bool_true_false_are_defined makrót adja, a
<stdalign.h> üres, a
<stdnoreturn.h> és a noreturn makró
pedig obsolescent (helyette [[noreturn]]). A headerenkénti
C17/C23 táblát a C hordozhatósági audit és
freestanding kitekintés (18.4) freestanding szakasza adja; a
tényleges támogatást a választott fordító és libc dokumentációja,
illetve fordítási próba dönti el, nem a fejléc neve. C17-es fordítással
a <stdckdint.h> és <stdbit.h>
jellemzően nem része a szabványos környezetnek.
A C++20 alapkönyvtár jóval nagyobb; az alábbi tábla a kurzus
szempontjából fontos fejléceket rendeli a korábbi részekhez. A
<version> fejléc a feature-test makrók elsődleges
forrása, nem maga a funkcionalitás.
| Terület | Fontos C++20 fejlécek | Kurzus |
|---|---|---|
| Utility, memória, típusok | <utility>, <tuple>,
<optional>, <variant>,
<any>, <compare>,
<type_traits>, <functional>,
<memory>, <memory_resource>,
<version>, <source_location> |
optional, variant és visit (31.1), tuple, pair, any és type erasure (31.2), unique_ptr és egyedi tulajdonlás (21.3), Allocator model és allocator_traits (37.1) |
| Tárolók | <array>, <vector>,
<deque>, <list>,
<forward_list>, <map>,
<set>, <unordered_map>,
<unordered_set>, <stack>,
<queue>, <span>,
<bitset> |
std::array, std::vector és folytonos tárolás (28.1)–Tárolóválasztási és invalidációs labor (28.6), span, byte és bounds-szerződések (31.3) |
| Iteratorok, algoritmusok, ranges | <iterator>, <algorithm>,
<numeric>, <execution>,
<ranges> |
Iterator-kategóriák és fél-nyílt tartomány (29.1)–Borrowed range, dangling és iterator lifetime (30.5) |
| Numerika | <cmath>, <complex>,
<valarray>, <random>,
<ratio>, <numbers>,
<bit>, <limits>,
<cfenv> |
Numerikus algoritmusok és kiértékelési sorrend (29.4), Bitműveletek és objektumreprezentáció C++-ban (31.4), Szövegkódolás, locale és random (32.5) |
| Szöveg, I/O, fájl, idő | <string>, <string_view>,
<charconv>, <format>,
<regex>, <locale>,
<iostream>, <fstream>,
<sstream>, <filesystem>,
<chrono> |
iostream, stream state és pufferelés (32.1)–Szövegkódolás, locale és random (32.5) |
| Konkurencia | <thread>, <stop_token>,
<mutex>, <shared_mutex>,
<condition_variable>, <future>,
<atomic>, <barrier>,
<latch>, <semaphore>,
<syncstream>, <coroutine> |
thread, jthread és kooperatív cancellation (34.1)–Aszinkron I/O adapter és coroutine-labor (35.5) |
A C++23-cal bővülő fejlécek, például az
<expected>, <print>,
<mdspan>, <flat_map>,
<flat_set>, <generator>,
<stacktrace> és <stdfloat>, külön
migrációs táblát igényelnek; elérhetőségüket __cpp_lib_*
makróval és a könyvtár verziójával kell ellenőrizni. A
<format> C++20-as fejléc, de a tényleges támogatását
szintén feature-test mutatja; ha hiányzik,
<charconv>-alapú fallback használható.
A standard könyvtár és a third-party csomag megkülönböztetése nem
formai kérdés. A Boost/Asio, a Catch2, a GoogleTest, a pybind11, a SWIG,
a Conan vagy a vcpkg saját verzióval, saját API- és ABI-szerződéssel,
külön dokumentációval rendelkezik. Ezek nem ISO részek,
és nem kerülnek be a <version> feature-test makrói
közé. Egy Boost.Asio-s hálózati rétegnél a Boost verziója, a rendszer
ABI-ja, a linkelési mód és a fordítási kapcsolók együtt számítanak; a
standard <thread> vagy <atomic>
jelenléte nem bizonyítja az Asio kompatibilitását. A továbbtanulási
forrásokat mindig a projekt saját, verziózott dokumentációjában kell
keresni; ez a könyv nem állítja, hogy bármelyik csomag adott kiadása
elérhető vagy tesztelt.
Egy szolgáltatás fájlból olvas, egész számokat parsol, időbélyeget
formáz, munkaszálakat indít, majd gracefully leáll. C++20-ban a
minimális térkép: <fstream> az olvasáshoz,
<string>/<string_view> a
szöveghez, <charconv> a számszorzáshoz,
<chrono> az időhöz, <thread> és
<stop_token> a szálakhoz,
<system_error> a hibákhoz. Ha
<format> valóban elérhető, a formázás ahhoz kerül;
különben marad a <charconv> és a stream-alapú
fallback. C17-ben ugyanez <stdio.h>,
<stdlib.h>, <string.h>,
<time.h>, <errno.h>, valamint
opcionálisan <threads.h> és
<stdatomic.h>; a hálózat POSIX-rétegen keresztül jön
be.
Az alábbi C++20 próba nem a teljes funkcionalitást, hanem a feature-test jelenlétét ellenőrzi. Illusztratív kimenet; futási eredményt nem állítok mért tényként.
#include <iostream>
#include <version>
int main() {
#ifdef __cpp_lib_ranges
std::cout << "ranges: " << __cpp_lib_ranges << '\n';
#else
std::cout << "ranges: nincs __cpp_lib_ranges\n";
#endif
#ifdef __cpp_lib_format
std::cout << "format: " << __cpp_lib_format << '\n';
#else
std::cout << "format: nincs __cpp_lib_format\n";
#endif
#ifdef __cpp_lib_expected
std::cout << "expected: " << __cpp_lib_expected << '\n';
#else
std::cout << "expected: nincs __cpp_lib_expected\n";
#endif
#ifdef __cpp_lib_print
std::cout << "print: " << __cpp_lib_print << '\n';
#else
std::cout << "print: nincs __cpp_lib_print\n";
#endif
}c++ -std=c++20 -pedantic-errors -Wall -Wextra probe.cpp -o probeC oldalon a __STDC_VERSION__ és a
__has_include(<stdckdint.h>) hasonló próbát ad; a
cc -std=c17 és cc -std=c23 külön buildprofil.
A fordító tényleges verzióját rögzíteni kell, mert a
cc/c++ mögötti implementáció nem
univerzális.
<print>/<expected> használatát
feltételezni.<atomic> és <stdatomic.h> nem
ugyanaz a szerződés.<codecvt>-et általános kódolási megoldásként
használni; a szövegkódolás részletei Szövegkódolás,
locale és random (32.5) alatt vannak.<stdckdint.h>, <threads.h>,
<complex.h>, <expected>,
<ranges> és <filesystem>
fejléceket nyelv, szabványverzió és fő szerep szerint.int értékeket parsol, időt mér, két szálat indít, és hibát
jelent. Adja meg a minimális fejlécfelsorolást, és jelölje, melyik
elemhez kell feature-test.<format>-et. Készítsen audit-táblát arról,
mi standard, mi third-party, és milyen ellenőrzés szükséges a verzió, az
ABI és a funkcionalitás igazolására.<stdckdint.h> C23, ellenőrzött egész aritmetika;
<threads.h> C11/C17 opcionális szálkezelés;
<complex.h> C17 komplex számok;
<expected> C++23 hibavisszaadási típus;
<ranges> C++20 ranges;
<filesystem> C++17 fájlrendszer. Ellenőrzés: a nyelvi
mód (-std=c17, -std=c23,
-std=c++20) és a feature-test makró együtt dönt, nem a
fejléc neve önmagában.
Minimális C++20 felsorolás: <fstream>,
<string>, <charconv>,
<chrono>, <thread>,
<stop_token>, <system_error>,
<vector>. A <format> csak akkor
kerül be, ha __cpp_lib_format elérhető; különben
<charconv> és stream-alapú kiírás a fallback.
Ellenőrzés: -std=c++20 fordítás, a
__cpp_lib_format és a szálkönyvtár tényleges linkelése; a
puszta include siker nem elég.
Standard: <format> és a C++20 alapfejlécek;
third-party: Boost.Asio és Catch2. Az audit táblázatban külön sor
szerepel a Boost és a Catch2 verziójára, a fordítási ABI-ra, a linkelési
rendre és a package manager által rögzített csomagazonosítóra. A
<version> csak a standard library feature-testjeit
mutatja, a Boost/Catch2 verzióját nem. Ellenőrzés: reprodukálható
buildprofil, a third-party fejlécek include-útja nem keveredik a
standard include-okkal, és a <format> hiányára
dokumentált fallback van.