Eh...<p><pre><code>  &#x2F;&#x2F; This code is licensed under CC0.
  &#x2F;&#x2F; A copy of the license can be obtained at https:&#x2F;&#x2F;creativecommons.org&#x2F;publicdomain&#x2F;zero&#x2F;1.0&#x2F;
  &#x2F;&#x2F; May you forever catenate in peace.
  #define strcatm(...) strcat_multi(__VA_ARGS__, NULL);
  char* strcat_multi(char *dest, ...) {
    va_list srcs;
    char *dest_end;
    const char *src;
    size_t src_sz;
    va_start(srcs, dest);
    for (dest_end = dest; *dest_end; dest_end++);
    for (src = va_arg(srcs, const char *); src; src = va_arg(srcs, const char *)) {
      src_sz = strlen(src);
      memmove(dest_end, src, src_sz);
      dest_end += src_sz;
      *dest_end = &#x27;\0&#x27;;
    }
    va_end(srcs);
    return dest_end;
  }
</code></pre>
There. Now go and catenate, children.