c-cpp-compilers
Skill1 starsChanged 8 months agoMITView on GitHub
C and C++ compiler toolchain skill covering GCC, Clang/LLVM, build modes, warnings, sanitizers, static analysis, LTO, PGO, C++20/23/26 features, and debugging. Use when writing or reviewing C/C++ code, choosing compiler flags, interpreting errors or warnings, enabling sanitizers, running clang-tidy or cppcheck, optimizing builds, working with C++20 modules or C23 features, or troubleshooting linker issues.
In this repository33 other files it gives its agents.
- argocdSkill
- coding-guidelinesSkill
- devops-iac-engineerSkill
- dag-flowdSkill
- flowd-rules-authorSkill
- frontend-designSkill
- ghSkill
- grafana-dashboardsSkill
- helmSkill
- kustomizeSkill
- legalizerSkill
- lua-projectsSkill
- markdown-documentationSkill
- mermaid-diagramsSkill
- meta-cognition-parallelSkill
- podmasterSkill
- practical-haskellSkill
- rcaSkill
- researcherSkill
- security-auditSkill
- solidity-securitySkill
- svg-genSkill
- tdd-red-green-refactorSkill
- tmux-masterySkill
- tokenomics-designSkill
- ultimate-dbSkill
- ultimate-nixosSkill
- ultimate-rustSkill
- ultimate-web3Skill
- web3-frontendSkill
- web3-testingSkill
- web3-whitepaperSkill
- ziglangSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 1 is distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 25
Always pass the standard flag explicitly.
- Very specific: line 40
Start with -Wall -Wextra -Wpedantic.
- Very specific: line 84
Use gcc-ar / gcc-ranlib for GCC LTO archives.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
C/C++ Compilers
Guidance for compiling, analyzing, and optimizing C and C++ code with GCC and Clang in 2026.
Reference files
- GCC specifics: gcc.md -- flags, diagnostics, PGO, LTO, error triage
- Clang specifics: clang.md -- diagnostics, optimization remarks, clang-tidy, macOS
- Sanitizers: sanitizers.md -- ASan, UBSan, TSan, MSan, LSan decision tree and reports
- Static analysis: static-analysis.md -- clang-tidy, cppcheck, scan-build, CI integration
- Modern C/C++: modern-cpp.md -- C++20 modules, C++23/26 features, C23, migration
Standards baseline (2026)
| Language | Preferred standard | GCC support | Clang support |
| C | -std=c23 (or -std=c17 for broad compat) | GCC 15+ | Clang 18+ |
| C++ | -std=c++23 (or -std=c++20 minimum) | GCC 14+ | Clang 18+ |
Always pass the standard flag explicitly. Never rely on compiler defaults.
Build modes
| Goal | Flags |
| Debug | -g -O0 -Wall -Wextra -Wpedantic |
| Debug (GDB-friendly optimized) | -g -Og -Wall -Wextra |
| Release | -O2 -DNDEBUG -Wall |
| Release (max throughput, native) | -O3 -march=native -DNDEBUG -flto |
| Release (min binary size) | -Os -DNDEBUG (Clang: -Oz) |
| Sanitizer build | -g -O1 -fsanitize=address,undefined -fno-omit-frame-pointer |
Warning discipline
Start with -Wall -Wextra -Wpedantic. Add -Werror in CI.
Suppress narrow scopes only:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
void callback(int ctx, int unused) { (void)ctx; }
#pragma GCC diagnostic popClang equivalent works the same. For project-wide suppression, prefer .clang-tidy config or -Wno-<flag> in build system, not in source.
Optimization decision tree
Need max throughput on known hardware?
yes -> -O3 -march=native -flto
no -> Have profiling data?
yes -> -O2 -fprofile-use (GCC) / -fprofile-instr-use (Clang)
no -> -O2
Size-constrained (embedded, shared lib)?
yes -> -Os (GCC/Clang) or -Oz (Clang only)
Numerical code that tolerates IEEE relaxation?
yes -> -Ofast (enables -ffast-math; breaks NaN/inf handling)
no -> stay with -O2/-O3-O3 vs -O2: -O3 adds aggressive loop transforms and wider inlining. Benchmark before committing -- i-cache pressure can cause regressions.
LTO
# GCC
gcc -O2 -flto=auto -c foo.c bar.c
gcc -O2 -flto=auto foo.o bar.o -o prog
# Clang (ThinLTO preferred for large projects)
clang -O2 -flto=thin -fuse-ld=lld -c foo.c bar.c
clang -O2 -flto=thin -fuse-ld=lld foo.o bar.o -o progUse gcc-ar / gcc-ranlib for GCC LTO archives. Clang ThinLTO links 5-10x faster than full LTO with comparable code quality.
PGO (profile-guided optimization)
GCC:
gcc -O2 -fprofile-generate prog.c -o prog_inst
./prog_inst < workload.input
gcc -O2 -fprofile-use -fprofile-correction prog.c -o progClang (LLVM instrumentation):
clang -O2 -fprofile-instr-generate prog.c -o prog_inst
./prog_inst < workload.input
llvm-profdata merge -output=prog.profdata default.profraw
clang -O2 -fprofile-instr-use=prog.profdata prog.c -o progSanitizer quick reference
| Bug class | Sanitizer | Flag |
| Heap/stack/global OOB, use-after-free, double-free | ASan | -fsanitize=address |
| Signed overflow, null deref, bad shift, misaligned access | UBSan | -fsanitize=undefined |
| Data races | TSan | -fsanitize=thread |
| Uninitialised reads (Clang only, all-instrumented build) | MSan | -fsanitize=memory |
| Memory leaks | LSan | via ASan (detect_leaks=1) or standalone |
Common combo: -fsanitize=address,undefined -fno-sanitize-recover=all -fno-omit-frame-pointer -g -O1
TSan and MSan are mutually exclusive with ASan. See sanitizers.md for report interpretation.
Static analysis (quick start)
# Generate compilation database
cmake -S . -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
# Run clang-tidy (recommended checks)
clang-tidy -checks='bugprone-*,clang-analyzer-*,performance-*,modernize-*' \
-p build src/foo.cpp
# Run cppcheck
cppcheck --enable=warning,performance,portability --error-exitcode=1 src/See static-analysis.md for .clang-tidy config, CI integration, and suppression patterns.
Common error triage
| Symptom | Likely cause | Fix |
undefined reference to 'foo' | Missing -lfoo or wrong link order | Libraries after objects: gcc main.o -lfoo |
multiple definition of 'x' | Defined in header without static/inline | extern in header, define in one .c |
implicit declaration of function | Missing #include or wrong standard | Add the header; check -std= |
incompatible pointer types | Wrong cast or missing prototype | Fix type; enable -Wall |
| ABI errors in C++ | Mixed -std= or different libstdc++ | Unify standard across all TUs |
relocation truncated | 32-bit relocation overflow | -mcmodel=large or restructure |
CMake integration
cmake_minimum_required(VERSION 3.28)
project(myproject LANGUAGES C CXX)
set(CMAKE_C_STANDARD 23)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
option(SANITIZE "Build with ASan+UBSan" OFF)
if(SANITIZE)
set(san_flags -fsanitize=address,undefined -fno-sanitize-recover=all
-fno-omit-frame-pointer -g -O1)
add_compile_options(${san_flags})
add_link_options(${san_flags})
endif()Useful one-liners
# Show all optimizations enabled at -O2 (GCC)
gcc -Q --help=optimizers -O2 | grep enabled
# Assembly output (Intel syntax)
gcc -S -masm=intel -O2 foo.c -o foo.s
# Preprocess and dump macros
gcc -dM -E - < /dev/null
# Clang optimization remarks (missed vectorization)
clang -O2 -Rpass-missed=loop-vectorize src.c
# Clang save all remarks to YAML
clang -O2 -fsave-optimization-record src.c
# Show include search path
gcc -v -E - < /dev/null 2>&1 | grep -A20 '#include <...>'Compiler-specific details
For GCC-specific flags, PGO nuances, and error patterns, see gcc.md. For Clang diagnostics, optimization remarks, macOS toolchain, and clang-tidy, see clang.md. For C++20 modules, C++23/26, and C23 features, see modern-cpp.md.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

