title: warning: comparison of unsigned expression >= 0 is always true
body: <p>I have the following error when compiling a C file:</p>
  
  <pre><code>t_memmove.c: In function ‘ft_memmove’:
  ft_memmove.c:19: warning: comparison of unsigned expression &gt;= 0 is always true
  </code></pre>
  
  <p>Here's the full code, via <code>cat ft_memmove.c</code>:</p>
  
  <pre><code>#include "libft.h"
  #include &lt;string.h&gt;
  
  void    *ft_memmove(void *s1, const void *s2, size_t n)
  {
      char    *s1c;
      char    *s2c;
      size_t  i;
  
      if (!s1 || !s2 || !n)
      {
          return s1;
      }
      i = 0;
      s1c = (char *) s1;
      s2c = (char *) s2;
      if (s1c &gt; s2c)
      {
          while (n - i &gt;= 0) // this triggers the error
          {
              s1c[n - i] = s2c[n - i];
              ++i;
          }
      }
      else
      {
          while (i &lt; n)
          {
              s1c[i] = s2c[i];
              ++i;
          }
      }
      return s1;
  }
  </code></pre>
  
  <p>I do understand that size_t is unsigned and that both integers will be >= 0 because of that. But since I'm subtracting one from the other, I don't get it. Why does this error come up?</p>