compilers-targeting-c
compilers-targeting-c copied to clipboard
A list of compilers that can generate C code
trafficstars
Compilers targeting C
The following is a list of open source compilers that can generate C (or in some cases, C++) code.
| Project name/link | Language(s) supported | Notes |
|---|---|---|
| ATS | ATS | |
| BaCon (Basic Converter) | Basic | |
| bc9Basic | Basic | Can generate C or C++ code. Runs only on Windows but can generate code for *nix. A fork of BCX that outputs valid ISO/ANSI C. Website archive. |
| Bigloo | Scheme (R5RS) | |
| Blech | Blech | A synchronous programming language for embedded reactive real-time-critical software. |
| bmx-ng | BlitzMax | A Monkey-derived BlitzMax to C transpiler. |
| Carp | Carp | A statically typed lisp, without a GC, for real-time applications. |
| Chapel | Chapel | |
| CHICKEN Scheme | Scheme (R5RS) | |
| Ciao | Prolog | |
| cito | Ć | A language for making portable libraries with a syntax like C#. Also targets Java, C#, JavaScript, ActionScript, Perl 5 and D. |
| CLiCC | Common Lisp | Compiles a large strict subset of Common Lisp + CLOS to C. |
| Critical Mass Modula-3 | Modula-3 | |
| Cyclone | Scheme (R7RS) | Cheney on the M.T.A. with native threads. |
| Cython | Python | |
| Céu | Céu | |
| eC | eC | An object-oriented superset of C with modules and generics. |
| EiffelStudio | Eiffel | |
| Embeddable Common-Lisp | ANSI Common Lisp | |
| Emfrp | Emfrp | A pure functional reactive programming language for small-scale embedded systems. |
| Emgo | Go | Compiles a subset of Go for 32-bit microcontrollers through C. |
| Epic | Epic | |
| Esotope Brainfuck Compiler | Brainfuck | |
| Euphoria to C Translator | Euphoria | |
| f2c | Fortran 77 | |
| Felix | Felix | Targets C++, not C. |
| FreeBASIC | Basic | |
| Futhark | Futhark | Purely functional data-parallel language generating OpenCL C |
| Gambit | Scheme (R5RS) | |
| GCL | Common Lisp | |
| Genie | Genie | |
| GHC | Haskell | C backend documentation page. |
| GnuCOBOL | COBOL 2014 with extensions | |
| Harbour | xBase compatible with CA-Clipper | |
| Haxe | Haxe | Has separate C++ and C targets |
| Idris | Idris | A pure functional programming language with dependent types. |
| Ivory | Ivory | A Haskell eDSL for safe systems programming. |
| jhc | Haskell 98 | The resulting code doesn't use a garbage collector. |
| Kit | Kit | A statically typed procedural language with manual MM, traits, pattern matching, and metaprogramming designed with game development in mind. |
| Language84 | Language84 | |
| mbeddr | mbeddr | A set of languages for embedded software engineering. |
| ManKai Common Lisp | Common Lisp | |
| matiec (unoffficial mirror) | ST, IL, SFC (IEC 61131) | A set of textual languages for PLC programming. |
| Mercury | Mercury | |
| MLton | Standard ML | |
| Monkey 2 | Monkey 2 | Targets C++, not C. |
| Mrustc | Rust | |
| NectarJS | JavaScript | The primary target is WebAssembly. How to compile to C. |
| Nelua | Nelua | A statically-typed meta-programmable systems programming language heavily inspired by Lua. |
| Nim | Nim | Can generate C, C++ or Objective C code. |
| Nit | Nit | |
| NN-512 | NN-512 graph language | Generate C99 code for neural net inference. |
| Nuitka | Python | |
| OBNC | Oberon | |
| ocamlcc | OCaml | Compiles OCaml bytecode to C. |
| oi | C with traits | Compiles to code that can be directly used from plain C. |
| ooc | ooc | |
| OpenDylan | Dylan | |
| p2c | Several Pascal dialects, including UCSD and Turbo Pascal; Modula-2. | Can generate C or C++ code. |
| ParparVM | Java bytecode | Use for the Java to iOS portability part of the Codename One project. |
| perlcc | Perl 5 | |
| purescript-native | PureScript | Targets C++, not C. |
| Py14 | Python | Targets C++, not C. |
| Pythran | Python | Targets C++, not C. |
| QuickJS | JavaScript (ES2020) | Compiles JavaScript to bytecode and embeds the bytecode in C. |
| Ragel | Ragel | Can generate C or C++ code. Compiles executable finite state machines from regular languages. |
| RPerl | RPerl, a restricted subset of Perl. | Targets C++, not C. Unrelated to RPython. |
| RPython | RPython, a restricted subset of Python. | Unrelated to RPerl. |
| Sather | Sather | |
| Scheme-to-C | Scheme | Example nanopass compiler |
| Seed7 | Seed7 | |
| Shedskin | Python | Targets C++, not C. |
| SLua | Lua | |
| SystemTap | SystemTap scripting language | SystemTap compiles kernel modules for monitoring Linux systems. |
| ThinScript | ThinScript | A lower-level programming language inspired by TypeScript. ThinScript also compiles to JavaScript and WebAssembly. |
| ts2c | JavaScript, TypeScript | Compiles a subset of JavaScript/TypeScript (ES3) to readable C89. |
| TSP | A typed subset of Tcl. | An experimental JIT. Compiles procedures written in a statically typed subset of Tcl to C or Java to accelerate Tcl programs. |
| UbxBasic | Basic | Can generate C or C++ code. A fork of BCX that adds Linux support in addition to Windows. Uses Glib. |
| Ur/Web | Ur/Web | |
| V | V | A no-GC systems language with modern features like sum types and immutability by default. |
| Vala | Vala | |
| Vostok | Oberon-07 | Also targets Java, JavaScript, and Oberon dialects. |
| wasm2c | WebAssembly | Converts WASM files to C source and header. |
| wasmdec | WebAssembly | Converts WebAssembly binaries to C. |
| wax | wax | A language design for transpiling. Compiles to C, C#, C++, Java, Lua, Python, Swift, TypeScript, and WebAssembly. |
| Zephir | Zephir | A language for writing PHP extensions. |
| ZZ | ZZ (Drunk Octopus) | A safe dialect of C for embedded systems inspired by Rust. |
C macro languages
- C-Mera, a simple source-to-source compiler that transforms s-expression notation to code in a C-family language.
- LISP/c, a Common Lisp-based macrolanguage for C.
See also
- Cello, a library for high-level programming in C.
- Clue, an ANSI C compiler targeting high level languages (Lua, JavaScript, Perl 5, C, Java, Common Lisp).
- LLVM C backend resurrected.
- luastatic, a tool that builds standalone executables from Lua programs by embedding Lua code in C.
Contributing
Your contributions are welcome! Please submit a pull request or create an issue to add a new compiler to the list.
