P99

◆ P99_STRCATS

#define P99_STRCATS (   TARG,
  ... 
)
Value:
p00_strcat_terminate \
(p00_strcat, \
P99_NARG(TARG, __VA_ARGS__), \
(&(p00_strcat_state){ .p00_buf = (TARG), .p00_pos = 0 }), \
__VA_ARGS__))

Append all argument strings after TARG to TARG.

TARG should be compatible with char* and must provide enough space to hold the concatenation of all strings. The remaining arguments must be compatible with const char*.

This macro ensures linear complexity in the operation. In particular each position in the argument strings is accessed at most twice, once by a call to strlen and once by a call to memcpy.

This uses some small inlined helper functions, since the repeated use of bare strcat would have quadratic complexity.

The resulting replacement produced by this macro evaluates each of the arguments at most once.

Definition at line 143 of file p99_map.h.

P99_BIGFUNC
#define P99_BIGFUNC(FUNC, M,...)
Realize the right associative call of binary function FUNC of all the arguments.
Definition: p99_for.h:154