I agree completely with what ariels said, but I think a bit more emphasis on the third point is appropriate.

If you're coding something with a life expectancy longer than a few weeks: Never ever do printf() debugging without your favorite precompiler tags around the printf() statement! Use #ifdef DEBUG or whatever, but make sure that the default compilation will skip the printf() lines.

This suggestion comes from personal experience with systems suddenly crashing after the debug messages had flooded the disk. This usually happened when a programmer delivered a patch and forgot to remove his debug code. With the precompiler tags, this would never have happened.