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.