Login | Register Construx Home
Code Complete, Second Edition
Chapters: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 28 29 30 31 32 33 34 35
   Contents Chapter 12 Checklist: Fundamental Data
Chapter 12: Fundamental Data Types

Numbers in General

  • Does the code avoid magic numbers?
  • Does the code anticipate divide-by-zero errors?
  • Are type conversions obvious?
  • If variables with two different types are used in the same expression, will the expression be evaluated as you intend it to be?
  • Does the code avoid mixed-type comparisons?
  • Does the program compile with no warnings?


  • Do expressions that use integer division work the way they're meant to?
  • Do integer expressions avoid integer-overflow problems?

Floating-Point Numbers

  • Does the code avoid additions and subtractions on numbers with greatly different magnitudes?
  • Does the code systematically prevent rounding errors?
  • Does the code avoid comparing floating-point numbers for equality?

Characters and Strings

  • Does the code avoid magic characters and strings?
  • Are references to strings free of off-by-one errors?
  • Does C code treat string pointers and character arrays differently?
  • Does C code follow the convention of declaring strings to be length constant+1?
  • Does C code use arrays of characters rather than pointers, when appropriate?
  • Does C code initialize strings to NULLs to avoid endless strings?
  • Does C code use strncpy() rather than strcpy()? And strncat() and strncmp()?

Boolean Variables

  • Does the program use additional boolean variables to document conditional tests?
  • Does the program use additional boolean variables to simplify conditional tests?

Enumerated Types

  • Does the program use enumerated types instead of named constants for their improved readability, reliability, and modifiability?
  • Does the program use enumerated types instead of boolean variables when a variable's use cannot be completely captured with TRUE and FALSE?
  • Do tests using enumerated types test for invalid values?
  • Is the first entry in an enumerated type reserved for "invalid"?

Named Constants

  • Does the program use named constants for data declarations and loop limits rather than magic numbers?
  • Have named constants been used consistently-not named constants in some places, literals in others?


  • Are all array indexes within the bounds of the array?
  • Are array references free of off-by-one errors?
  • Are all subscripts on multidimensional arrays in the correct order?
  • In nested loops, is the correct variable used as the array subscript, avoiding loop-index cross talk?

Creating Types

  • Does the program use a different type for each kind of data that might change?
  • Are type names oriented toward the real-world entities the types represent rather than toward programming-language types?
  • Are the type names descriptive enough to help document data declarations?
  • Have you avoided redefining predefined types?
  • Have you considered creating a new class rather than simply redefining a type?

Other Code Complete Resources:

See Also: