Skip to content

Course Support Matrix ​

The course distinguishes what a standard specifies from what a particular compiler, library, operating system, or build tool currently supports.

Language baselines ​

New C examples use C17 unless an article explicitly demonstrates C23 or an older dialect. C17 is a conservative baseline with broad compiler support; the course explains C99, C11, C17, and C23 differences and teaches how to select a dialect.

New C++ examples use C++20 unless an article explicitly needs another version. C++20 provides a coherent modern baseline—RAII, move semantics, smart pointers, lambdas, concepts, and ranges—while remaining widely usable. The course identifies C++23 additions and covers older forms that appear in maintained code.

Neither baseline means every platform ships every optional or newly standardized library facility. Examples state important availability assumptions.

Tool families ​

The course covers these families without requiring all of them on one machine:

ResponsibilityCovered implementations
C/C++ compilerGCC, upstream Clang/LLVM, Apple Clang, MSVC, clang-cl, MinGW-w64
Standard libraryglibc/musl and compiler runtimes for C; libstdc++, libc++, and the MSVC STL for C++
Native buildDirect compiler commands, Make, Ninja, CMake, MSBuild, Visual Studio solutions/projects, Xcode
PackagesSystem packages, vendoring, CMake FetchContent, pkg-config, vcpkg, Conan, NuGet where applicable
DebuggingGDB, LLDB, Visual Studio debugger
AnalysisCompiler warnings, sanitizers, Valgrind, clang-tidy, static analyzers, formatters

Validation environments ​

Repository validation uses every supported tool it discovers, but absence of a tool is reported as a skip rather than silently treated as success. Self-contained examples are compiled in their declared language mode. Cross-platform command fragments and intentionally broken examples receive structural and editorial checks because one host cannot prove all platform behavior.

Version-sensitive writing policy ​

Exact tool versions age quickly. Articles prefer durable concepts and official documentation links. They name a minimum version only when it affects a reader's ability to use a feature. Language-version labels belong beside the relevant feature rather than only in a historical summary.