there are many functions whose definitions are subject
to interpretation.
 For example, does puts() add a newline ('\n')?   Many implementation 
My second edition K&R says (page 247) :
'
int puts(const car *s)
  puts writes the string s and a newline to stdout. It returns EOF if an
  error occurs, non-negative otherwise'
Seems pretty clear to me. It adds a newline.
  choices, rather than be codified or standardized are
left open, and are
 now often referred to as "undefined".  Not "undefined" as in x/0 ,
but
 "undefined" as in what does n=2; A[n++] = n++; do? 
I don't want to try it. It might make demons come out of my nose
(particularly on Halloween).
-tony