title: What are the Constraints in Standard C?
body: <p>C standards talk about <em>constraints</em>, e. g. <strong>ISO/IEC 9899:201x</strong> defines the term</p>
  
  <blockquote>
    <p><strong>constraint</strong><br>
    restriction, either syntactic or semantic, by which the
    exposition of language elements is to be interpreted</p>
  </blockquote>
  
  <p>and says in chapter <strong>Conformance</strong></p>
  
  <blockquote>
    <p>If a ‘‘shall’’ or ‘‘shall not’’ requirement that appears outside of a
    constraint or runtime-constraint is violated, the behavior is
    undefined.</p>
  </blockquote>
  
  <p>In chapter <strong>Environment</strong>, Subsection <strong>Diagnostics</strong> it is said</p>
  
  <blockquote>
    <p>A conforming implementation shall produce at least one diagnostic
    message (identified in an implementation-defined manner) if a
    preprocessing translation unit or translation unit contains a
    violation of any syntax rule or constraint, even if the behavior is
    also explicitly specified as undefined or implementation-defined.</p>
  </blockquote>
  
  <p>So, it is important to know what are the constraints in C, for example for compiler writers to judge when diagnostics are required, or for C programmers when diagnostics rather than just undefined behaviour can be expected.<br>
  Now, there are sections all over the standard document with the title <strong>Constraints</strong>, but I cannot find definitive wording as to what exactly the term <em>constraint</em> covers in the standard.</p>
  
  <ul>
  <li>Are the constraints everything that appears in the sections titled <strong>Constraints</strong>?</li>
  <li>Is every requirement that is stated outside of those sections not a constraint?</li>
  <li>Is there a comprehensive description of <em>constraint</em> in the standard that I missed?</li>
  </ul>