Freedom251 › C and C++ Static Analysis Tools
CBMC

What CBMC is
CBMC is a bounded model checker for C and C++ programs, available for Linux, macOS, and Windows. It checks memory safety, including array bounds and pointer use, along with several forms of undefined behavior and user-specified assertions. Verification works by unwinding program loops and passing the resulting equation to a decision procedure. CBMC supports C89, C99, most of C11 and C17, and compiler extensions from GCC, Clang, and Visual Studio. Its supported features include multidimensional and dynamically sized arrays, dynamic memory, nondeterminism, assumptions, and assertions; listed C++ support includes classes, templates, and selected STL containers. It can check I/O equivalence between C or C++ and languages such as Verilog, and generate tests for branch, decision, path, and MC/DC coverage. A MiniSat-based bit-vector solver is included. Boolector, CVC5, and Z3 are supported but must be installed separately. CBMC is free under a BSD 4-clause license. The Windows and macOS distributions are command-line tools with no graphical interface.
Who it suits
CBMC suits developers and verification users checking C or C++ programs for memory issues, undefined behavior, or assertions. It is also relevant to users generating coverage-focused tests or checking I/O equivalence with languages such as Verilog.
What it does well
- Checks array bounds and safe pointer use.
- Supports C89, C99, and most C11/C17.
- Can generate tests for four coverage criteria.
- Free under a BSD 4-clause license.
What to know first
- Windows and macOS releases have no GUI.
- External Boolector, CVC5, and Z3 solvers require separate installation.
- Windows release runs from Visual Studio Command Prompt.
Plans
| Plan | Billed and limits | Price |
|---|---|---|
| CBMC | BSD 4-clause license · command-line tool | Free |
As cprover.org lists them, read 2 Oct 2026. The maker's own page has the final word.
Getting started
- Open the CBMC website.
- Choose the distribution for Linux, macOS, or Windows.
- On Windows, run the x64 command-line binary from the Visual Studio Command Prompt.
- On Linux, install through Debian or Ubuntu packaging, or Fedora's dnf package manager.
- Install Boolector, CVC5, or Z3 separately if you want to use an external solver.
CBMC is a bounded model checker for C and C++ that verifies program properties and can generate tests. It suits developers who need checks such as memory-safety verification or assertion checking in a command-line workflow. Its free license and broad C support are compelling, but loop unwinding and separately installed external solvers are important practical constraints.
Overview
CBMC analyzes bounded program behavior by unwinding loops and passing the resulting equation to a decision procedure. That gives C and C++ developers a way to check specified properties, including memory safety, undefined behavior and user assertions. The method is bounded: users should choose it for this style of analysis, rather than assume it proves properties across unbounded execution.
It can also check I/O equivalence between C or C++ and languages such as Verilog. That makes it relevant to work involving software and hardware interfaces, though the tool remains a command-line checker rather than a graphical review environment.
Key features
- Memory and behavior checks: CBMC checks array bounds, pointer use, several forms of undefined behavior and user-specified assertions. These checks target concrete classes of defects, making the tool useful when those properties matter more than a general-purpose developer interface.
- C and C++ support: It supports C89, C99, most of C11 and C17, and many GCC, Clang and Visual Studio extensions. Supported features include multidimensional and dynamically sized arrays, dynamic memory, nondeterminism, assumptions and assertions; C++ support includes classes, templates and selected STL containers. This breadth helps with varied codebases, but does not mean every language feature is covered.
- Solver choices: A MiniSat-based bit-vector solver is included, so users can begin without configuring an external solver. Boolector, CVC5 and Z3 are also supported, but must be installed separately.
- Test generation: CBMC can generate tests for branch, decision, path and MC/DC coverage. This extends its usefulness beyond checking properties when coverage-oriented test cases are also needed.
Pricing
CBMC costs nothing under a BSD 4-clause license, with the command-line tool included. There is no free trial because the software is free. The license provides the software “AS IS” and disclaims warranties and liability, so organizations should account for those terms when deciding whether it fits their requirements.
Platforms
CBMC supports Linux, macOS and Windows. Debian and Ubuntu package it, and Fedora users can install it with dnf. The Windows release is an x64 command-line binary run from the Visual Studio Command Prompt; macOS is also command-line only. Users seeking a GUI should look elsewhere on either platform.
Who it's for
CBMC is best suited to C and C++ developers who want bounded checks for memory safety, undefined behavior or assertions, and to teams that need coverage-based test generation or C/C++ I/O equivalence checks with languages such as Verilog. It is a weaker fit for users who require a graphical interface, broad language coverage beyond its supported C and C++ features, or external solver integration without separate installation.
Pros and cons
- Pro: The included MiniSat-based solver and free BSD-licensed tool provide a usable starting point without buying a plan.
- Pro: Checks for memory safety, undefined behavior and assertions address specific correctness risks in C and C++ programs.
- Pro: Test generation for several coverage criteria and cross-language I/O equivalence add uses beyond defect checking alone.
- Con: Verification relies on loop unwinding, so CBMC is a bounded checker, not a universal guarantee about all executions.
- Con: External solvers require separate installation, and Windows and macOS users get no GUI.
Alternatives
For a broader comparison, see C and C++ Static Analysis Tools. Consider Infer instead if you want free static analysis with Linux, macOS, self-hosted and web platform options. MATLAB Grader may fit better when MATLAB-based grading is the goal; its free plan requires a MATLAB license current under maintenance, and LMS integration requires a qualifying academic license.
Qodana is another option if a freemium tool with a free trial and API, web and self-hosted platform options is a better match. Semgrep Code may suit teams seeking code and supply-chain coverage; its Free Edition is capped at 10 repositories, 10 contributors and 60 AI credits.
Choose Clang Static Analyzer for an open-source analyzer covering C, C++ and Objective-C. Flawfinder is a free GPL-2.0+ alternative. Parasoft SOAtest offers tailored pricing based on business needs. CodeChecker is another free option.
Verdict
Choose CBMC if you need free, bounded verification and test generation for C and C++ and are comfortable working at the command line. Its focused checks and included solver make it a practical option for code where memory safety, assertions or coverage matter. Look elsewhere if you need a GUI or want external solvers to work without installing them separately.
Verdict
CBMC provides program checks and test generation as a free command-line tool. Users who need external solvers must install them separately, and Windows and macOS users should expect no graphical interface.
Questions
How much does CBMC cost?
CBMC is free. Its listed plan is free.
Which operating systems does CBMC support?
CBMC is available for Linux, macOS, and Windows.
Does CBMC have a graphical interface?
The Windows and macOS releases are command-line tools with no GUI.
Which programming languages does CBMC support?
It supports C89, C99, most of C11 and C17, and many extensions from GCC, Clang, and Visual Studio. Supported C++ features include classes, templates, and selected STL containers.
Is CBMC open source?
CBMC is released under a BSD 4-clause license.
Which solvers can CBMC use?
It includes a MiniSat-based bit-vector solver and supports Boolector, CVC5, and Z3. The external solvers must be installed separately.
Facts from CBMC's own pages
- Analysis method
- Verification unwinds program loops and passes the resulting equation to a decision procedure. · cprover.org, 2 Oct 2026
- C features
- Supported C features include multidimensional and dynamically sized arrays, pointer checks, dynamic memory, nondeterminism, assumptions and assertions. · cprover.org, 1 Oct 2026
- Cross-language checking
- CBMC can check C and C++ for I/O equivalence with languages such as Verilog. · cprover.org, 1 Oct 2026
- Interface
- The maker describes the Windows and macOS releases as command-line tools with no GUI. · cprover.org, 2 Oct 2026
- Language features
- The supported features page lists C arrays, pointers, dynamic memory, assertions, and C++ classes, templates, and selected STL containers. · cprover.org, 2 Oct 2026
- Language support
- CBMC supports C89, C99, most C11/C17 and compiler extensions from GCC, Clang and Visual Studio. · cprover.org, 1 Oct 2026
- License
- The maker identifies the license as BSD 4-clause; its terms permit redistribution and use in source or binary form subject to conditions. · cprover.org, 2 Oct 2026
- License terms
- The license provides the software “AS IS” and disclaims warranties and liability. · cprover.org, 2 Oct 2026
- Linux packaging
- CBMC is packaged for Debian and Ubuntu and can also be installed with Fedora's dnf package manager. · cprover.org, 1 Oct 2026
- macOS limitation
- The macOS distribution is command-line only and has no GUI. · cprover.org, 1 Oct 2026
- Memory safety
- CBMC verifies memory safety, including array bounds and safe pointer use. · cprover.org, 1 Oct 2026
- Platforms
- The maker lists Linux, Windows, and macOS availability and provides Linux packages for Debian, Ubuntu, and Fedora. · cprover.org, 2 Oct 2026
- Purpose
- CBMC is a bounded model checker for C and C++ programs. · cprover.org, 2 Oct 2026
- Solvers
- CBMC includes a MiniSat-based bit-vector solver and supports external Boolector, CVC5 and Z3 solvers. · cprover.org, 1 Oct 2026
- Solver support
- CBMC includes a MiniSat-based bit-vector solver and supports external SMT solvers including Boolector, CVC5, and Z3, which must be installed separately. · cprover.org, 2 Oct 2026
- Support
- The CBMC page directs questions to Daniel Kroening, and the CPROVER manual links to Google Groups support and announcements. · cprover.org, 2 Oct 2026
- Supported languages
- It supports C89, C99, most of C11/C17, and many compiler extensions from GCC, Clang, and Visual Studio. · cprover.org, 2 Oct 2026
- Test generation
- CBMC can generate test cases for coverage criteria including branch, decision, path, and MC/DC. · cprover.org, 2 Oct 2026
- Undefined behavior
- CBMC checks various forms of undefined behavior and user-specified assertions. · cprover.org, 1 Oct 2026
- Verification
- It checks memory safety, several kinds of undefined behavior, user assertions, and C/C++ I/O equivalence with other languages such as Verilog. · cprover.org, 2 Oct 2026
- Verification method
- CBMC unwinds program loops and passes the resulting equation to a decision procedure. · cprover.org, 1 Oct 2026
- Windows limitation
- The Windows download is an x64 command-line binary with no GUI and is run from the Visual Studio Command Prompt. · cprover.org, 1 Oct 2026
Where CBMC stands on Freedom251
- C and C++ Static Analysis Tools#2 of 25