Eh...
// This code is licensed under CC0.
// A copy of the license can be obtained at https://creativecommons.org/publicdomain/zero/1.0/
// 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 = '\0';
}
va_end(srcs);
return dest_end;
}
There. Now go and catenate, children.