I played a bit with CC65, which supports a subset of ANSI C89 (e.g. no floating point). The code it generates is quite different from what a competent 6502 assembly programmer would write. Having only one 8-bit accumulator, two 8-bit index registers and a 256 byte stack to work with makes 6502 a rather difficult target for a C compiler I guess. IMO C compilers for the 6502 are not very useful if you just want to reuse some C code not specifically written for this target. It might be somewhat useful if for some reason you have to use a 6502, have memory and performance to spare, don't feel like writing 6502 assembly code but are willing to write C code specifically for this target. I feel pretty much the same way about C compilers 8-bit AVR's, though for that target the GCC compiler can produce quite reasonable code if you keep the limitations of the 8-bit AVR in mind.