I have been working on a compiler in C++ (not using external libs) for a language that is basically C with some caveats.
The compiler emits x86 assembly code for Linux. Please excuse the lack of proper optimization.
Here you can see a working 'printf("%d", n)' implementation (input is 128 in main()) compiled by my compiler. (I know program could be optimized or made cleaner but whatever)
Notable differences are not needing a "struct" keyword for non-typedef instances of a struct (although structs aren't shown here), and a "write" keyword that outputs a single char to stdout.
Floats are supported (although not shown here), using SSE with non-packed instructions. Due to the nature of that cmpss instruction, float comparisons output a float type with either all bits set to 1 or 0. But, integer comparisons are 0/1.