Jeff King <peff@xxxxxxxx> writes: >> struct strs {...}; >> >> void strs_init(struct strs *); >> void strs_push(struct strs *, const char *); >> void strs_pushf(struct strs *, const char *fmt, ...); >> void strs_pushl(struct strs *, ...); >> void strs_pushv(struct strs *, const char **); >> void strs_pop(struct strs *); >> void strs_clear(struct strs *); >> const char **strs_detach(struct strs *); >> >> ...is short, feels pretty natural, and doesn't require understanding >> "v" for "vector". > > Not bad. The "v" carries the information that it _is_ a NULL-terminated > vector and not some other list-like structure (and so is suitable for > feeding to execv, etc). But that may just be obvious from looking at its > uses and documentation. And with "v", it probably is obvious without looking at its uses and documentation, so... ;-)