| > Implementation Defined behavior means the standards authors provided a list of possible behaviors The standard definitely does not require implementations to pick from a list of possible behaviors. All the standard requires is that the implementation document the behavior. For example, the behavior on integer demotion is implementation-defined and there's no list of possible behaviors: > When an integer is demoted to a signed integer with smaller size, or an unsigned integer is converted to its corresponding signed integer, if the value cannot be represented the result is implementation-defined. > Unspecified behavior is more what you're thinking of, though in that case the standard still provides a list of possibilities that compiler authors have to pick from That contradicts the standard's definition of unspecified behavior. For example, from the C89 draft (emphasis added) [0]: > Unspecified behavior --- behavior, for a correct program construct and correct data, for which the Standard imposes no requirements. [0]: https://port70.net/%7Ensz/c/c89/c89-draft.html#1.6sd |