List implementation in C
Surprising name

default_capacity is in the public .h file

In a header for list_this and list_that, finding default_capacity is not good and a name-space collision headache.  Suggest list_default_capacity instead.

0 allocation

Be careful about allocating 0 memory (possible with default_capacity == 0 and list_create(0, ...)).  Receiving NULL in that case does not certainly indicate an out-of-memory condition.

// list-&gt;elements = (void**) malloc(sizeof(void*) * initial_capacity);
// if (!list-&gt;elements) return NULL;

list-&gt;elements = malloc(sizeof list-&gt;elements[0] * initial_capacity);
if (list-&gt;elements == NULL &amp;&amp; initial_capacity == 0) {
  return NULL;
}


default_capacity not needed

With generic list code, I'd expect the ability to create a 0 length list and not have 0 indicate "use a default value".