I would use the Microchip C30, it is a port of the GCC compiler which knocks spots off the other offerings. I am using the dsPic in my work and it is a very nice Micro for embedded. True 16 Bit.
C is a powerful and expressive language, and like any language, it takes time and experience to get the best out of it. The only way to learn is by using it in real world applications. Books like 'Learn C in 21' days are bullshit! You might as well publish,
'Learn Swedish in 21 days'. You will get about the same from both.