re: cpp, It's complicated
I don't care to explain it much, though I will volunteer:
I currently use:
gcc (whatever came w/arduino0016)
I run it from wine under ubuntu 32
it gets burned using avrdude from a shell and a usbtinyISP connected to a homemade
chip clip
I also have specific fuse settings for the 328 and re-read them and the code after burning for validation.
Most of it I picked up from turning on the verbose logging settings in arduino, and lots of searching avrfreaks.net and some arduino.cc and had to use avrstudio under windows to figure out some of the fuses as well.