NASA’s 10 rules for developing safety-critical code
sdtimes.com
sdtimes.com
goto's are useful for error escape paths. I've seen rather convoluted control flow done where breaking down and using a couple of goto's would make things clean and understandable.
Function pointers are immensely useful.
Variadic macros are useful for implementing optional debugging statements. As in PRINTF(format, args...);
Buzz Lightyear voice: Errors! Errors everywhere!
http://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
My favorite rule is #14, check the return codes of functions.