• Does the program compile with no warnings?
  • Is the nominal path through the code clear?
  • Does the code avoid magic numbers?
  • Does the code anticipate divide-by-zero errors?
  • Are type conversion obvious?
  • Does the program avoid overflow problems?
  • Does the code prevent rounding errors?
  • Does the code avoid comparing floating point numbers for equality?
  • Does the code avoid using variables for more than one purpose?
  • Does the code reserve a parachute of memory for cleanup and exit on emergencies?
  • Are the if/else clauses used correctly, not reversed?
  • Does the normal case follow the if rather than the else?
  • Are complicated tests encapsuled in boolean functions calls?
  • Are the most common cases tested first?
  • Have you used structures instead of single variables to manipulate groups of related data?
  • Have you considered creating a class as an alternative for using a structure?
  • Are access routines used instead of global data?, if not, why?
  • Are related access routines at the same abstraction level?
  • Are pointer operations isoleted in routines?
  • Does the code validate pointers before using them?
  • Are pointers set to null after they're freed?
  • **Does the program allocate enough memory so it can shutdown gracefully if it runs out of memory?
  • Are pointers used only as a last resort, when no other method is available?