I am looking for a good C compiler for the PIC 16 family, working on Windows.
A couple of colleagues use bknudc but some seem to dislike it
The BKND C compiler is indeed quirky, and doesn't really support the linker well. But then, most of the PIC16 chips are small enough that it's not really a big deal to just include all your source in one C file.
I did some comparison of the BKND and HiTECH C compiler, and the BKND seems to generate significantly better code. At least in my application, this was necessary for meeting the speed/space requirements of my application on such a small MCU.
Many of the quirks of the BKND compiler (extra data types, etc) are very helpful for tuning your code to run on a small MCU. The standard C you'd write on an ARM or x86 really isn't appropriate for a tiny CPU with only a couple hundred bytes of RAM anyway.
For the larger PIC chips (18, 24F, etc) the C compiler supplied by Microchip is great.
HI-TECH has a C compiler for the PIC16 and they even offer a Freeware version.
HI-TECH C Compiler