docs: Add example for DARRAY as function parameter

This commit is contained in:
CodeYan01 2023-06-09 15:30:20 +08:00 • committed by Lain
commit a287313070

View file

@ -11,7 +11,7 @@ Dynamically resizing arrays (a C equivalent to std::vector).
The base dynamic array structure.
.. :c:macro:: DARRAY(type)
.. macro:: DARRAY(type)
Macro for a dynamic array based upon an actual type. Use this with
da_* macros.
@ -50,6 +50,42 @@ dynamic array value with a reference (&) operator. For example:
/* free when complete */
da_free(array_of_integers);
To pass dynamic arrays to functions as parameters, create a typedef with the
:c:macro:`DARRAY` macro and type so you can pass the dynamic array with a
reference (&) operator. An alternative is to define a struct that will contain
the dynamic array, and that struct will be passed to the functions, instead of
the dynamic array directly. An example with the typedef method:
.. code:: cpp
typedef DARRAY(int) int_array_t;
void generate_integers(int_array_t *integers, int start, int end)
{
for (int i = start; i < end; i++)
da_push_back(*integers, &i);
}
[...]
int_array_t array_of_integers;
da_init(array_of_integers);
generate_integers(&array_of_integers, 0, 10);
/* free when complete */
da_free(array_of_integers);
**IMPORTANT NOTE:** While it is also possible to accept the internal
:c:struct:`darray` struct as a function parameter (via the ``da`` member
variable of dynamic arrays) and redefine a variable with :c:macro:`DARRAY`
inside the function, doing so is not safe and not recommended. One potential
issue with it is having a type declaration in the function that is different
than the type of the actual dynamic array that will be passed to the function,
which will cause memory access issues that will not be caught by the compiler.
As mentioned above, the recommended way is to create a typedef or a container
struct, which will be safer in usage.
.. function:: void da_init(da)
Initializes a dynamic array.