Appearance
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:
| Responsibility | Covered implementations |
|---|---|
| C/C++ compiler | GCC, upstream Clang/LLVM, Apple Clang, MSVC, clang-cl, MinGW-w64 |
| Standard library | glibc/musl and compiler runtimes for C; libstdc++, libc++, and the MSVC STL for C++ |
| Native build | Direct compiler commands, Make, Ninja, CMake, MSBuild, Visual Studio solutions/projects, Xcode |
| Packages | System packages, vendoring, CMake FetchContent, pkg-config, vcpkg, Conan, NuGet where applicable |
| Debugging | GDB, LLDB, Visual Studio debugger |
| Analysis | Compiler 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.