CppAst.NET Build Status NuGet

CppAst provides a C/C++ parser for header files with access to the full AST, comments and macros for .NET Framework and .NET Core


The target primary usage of this library is to serve as a simple foundation for domain oriented PInvoke/Interop codegen


  • Compatible with .NET Standard 2.0+
  • Using Clang/libclang 10.0.0
  • Allow to parse in-memory C/C++ text and C/C++ files from the disk
  • Simple AST model
  • Full type system
  • Provides basic access to attributes (_declspec(...) or __attribute__((...)))
  • Provides access to attached comments
  • Provides access to expressions for variable and parameter init value (e.g const int x = (1 + 2) << 1 the (1 + 2) << 1 will be retrievable as a binary expression from the AST)
  • Provides access to macro definitions, including tokens via the option CppParserOptions.ParseMacros (default is false)


Check the user guide documentation from the doc/ folder.

Usage Example

You can jump-start with the CppParser.Parse method:

// Parse a C++ files
var compilation = CppParser.Parse(@"
enum MyEnum { MyEnum_0, MyEnum_1 };
void function0(int a, int b);
struct MyStruct { int field0; int field1;};
typedef MyStruct* MyStructPtr;
// Print diagnostic messages
foreach (var message in compilation.Diagnostics.Messages)

// Print All enums
foreach (var cppEnum in compilation.Enums)

// Print All functions
foreach (var cppFunction in compilation.Functions)

// Print All classes, structs
foreach (var cppClass in compilation.Classes)

// Print All typedefs
foreach (var cppTypedef in compilation.Typedefs)

Prints the following result:

enum MyEnum {...}
void function0(int a, int b)
struct MyStruct { ... }
typedef MyStruct* MyStructPtr


This library is distributed as a NuGet package NuGet

Known issues

The library libclang used by this project has some known issues and limitations:

  • Attributes are not fully exposed (e.g in function parameters, on typedefs...)
  • Generic instance types are not fully exposed (e.g used as parameters, or as base types...)


This software is released under the BSD-Clause 2 license.


  • ClangSharp: .NET managed wrapper around Clang/libclang

The C++ project cppast serves similar purpose although CppAst.NET does not share API or any implementation details.


Alexandre Mutel aka xoofx.


CppAst is a .NET library providing a C/C++ parser for header files powered by Clang/libclang with access to the full AST, comments and macros

Cppast.net Info

⭐ Stars258
🔗 Source Codegithub.com
🕒 Last Update10 months ago
🕒 Created4 years ago
🐞 Open Issues10
➗ Star-Issue Ratio26
😎 Authorxoofx