>C is predictable when your program is bug free and relies on no implementation defined, unspecified or underspecified behavior.
Okay, I know what 'undefined' means (nasal demons, etc.); I think I know what 'implementation defined' means; I guess 'underspecified' means that the standard writers didn't consider something quite precisely enough? But what - exactly - does 'unspecified' mean?
The first few Google hits don't distinguish sufficiently clearly for my liking between 'implementation defined' and 'unspecified'.
I'm guessing it's something like "a given compiler implementation can do whatever it likes, including behave non-deterministically, but your program remains valid so all other well-defined constructs remain well-defined", whereas 'implementation defined' is the same but without "behave non-deterministically"?