Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


This is a work in progress. Still in the extremely-early stages.

The current goal of this project is to implement (most of) C, with some deviations which can be opted-out of, plus some new features.

Parts of C17 that won't be implemented.

  • Atomics
  • Complex numbers
  • The standard library

Deviations from the C spec.

  • Nn -> operator. Pointers to structs can be accessed with ..
  • struct has an implicit typedef
  • Zero initialization by default

New features

  • Wide types and SIMD operators
  • Reflection strings for enum
  • decltype
  • C++ style auto
  • File-system based module/build system
  • Namespaces
  • Function overloading
  • Memory checking a-la address sanitizer
  • else after while


  • x64 on Windows and macOS
  • ARM on macOS
  • SPIR-V


  • On Windows: MSVC (tested with Visual Studio 2017)
  • On Mac/Linux: Clang


What is this?

scc is a C compiler that plays it loose with the spec.


I don't know. As long as I keep a non-zero pace and manage not to die before it's done then time is on my side.

What are your sources and references?

My main sources of documentation have been

  • The C11 spec .
  • The [Intel Software Development Manual] (
  • Retargetable C Compiler, mostly for implementing the front end. For code generation I have used the following:
  • Code generation is 100% based on DCCG, which I found out thank's to Fabian Giesen's papers I like
  • On extreme circumstances I might peek at Fabian Bellard's tcc implementation. However, this is considered cheating and is left as an absolute last measure.
  • On a couple of occasions I have turned to Agner Fog, but the code generator is still very simple and almost no effort has been spent on actually outputting decent code.


No releases published


No packages published