...
The C99 standard identifies two four different kinds of non-portable behavior:
- unspecified behavior (section 1 of Annex J)
- undefined behavior (section 2 of Annex J)
- implementation-defined behavior (section 3 of Annex J)
- locale-specific behavior (section 4 of Annex J)
Sections 1 through 4 of Annex J of the C99 standard enumerate distinct instances of unspecified, undefined, implementation-defined and unspecified, and locale-specific behavior, respectively.
C99 Section 3.4.1 defines implementation-defined behavior as
...
An example of unspecified behavior is the order in which the arguments to a function are evaluated.Appendix J.1, "Unspecified behavior," provides a list of unspecified behaviors in C99, and Appendix J.3, "Implementation-defined behavior," provides a list of implementation-defined behaviors in C99.
Most legitimate platform dependencies can and should be isolated in separate modules that use portable interfaces but platform-specific implementations.
...