title: Is a char value set to CHAR_MAX guaranteed to wrap around to CHAR_MIN?
body: <p>My code:</p>
  
  <pre class="lang-c prettyprint-override"><code>#include &lt;stdio.h&gt;
  #include &lt;limits.h&gt;
  
  int main()
  {
      char c = CHAR_MAX;
      c += 1;
      printf("CHAR_MIN=%d CHAR_MAX=%d c=%d (%c)\n", CHAR_MIN, CHAR_MAX, c, c);
  }
  </code></pre>
  
  <p>Output:</p>
  
  <pre class="lang-c prettyprint-override"><code>CHAR_MIN=-128 CHAR_MAX=127 c=-128 ()
  </code></pre>
  
  <p>We see that when we increment a <code>char</code> variable set to <code>CHAR_MAX</code>, it wraps around to <code>CHAR_MIN</code>. Is this behavior guaranteed? Or is it going to be undefined behavior or implementation-specified behavior? What does the C99 standard say about this?</p>
  
  <p>[Note: <a href="https://stackoverflow.com/q/48902396/1175080">What happen when give value bigger than CHAR_MAX (127) to char</a> or <a href="https://stackoverflow.com/q/20756626/1175080">C- why char c=129 will convert into -127?</a> does not address this question because they talk about assigning an out-of-range value not incrementing a value to an out-of-range value.]</p>