On Fri, 29 May 2015 17:43:08 +0200
Maciej Gajdzica <maciejx.t.gajdzica at intel.com> wrote:

> +/**
> + * Find object of name *name* in *obj_array* which is constant size array of
> + * elements that have field *name*.
> + *
> + * @param obj_array
> + *  Constant size array
> + * @param name
> + *  name of object to find.
> + * @return
> + *  Pointer to object in *obj_array* or NULL if not found.
> + */
> +#define APP_PARAM_FIND(obj_array, key)                          \
> +({                                                              \
> +     ssize_t obj_idx;                                            \
> +     const ssize_t obj_count = RTE_DIM(obj_array);               \
> +                                                                \
> +     for (obj_idx = 0; obj_idx < obj_count; obj_idx++) {         \
> +             if (!APP_PARAM_VALID(&((obj_array)[obj_idx])))          \
> +                     continue;                                           \
> +                                                                         \
> +             if (strcmp(key, (obj_array)[obj_idx].name) == 0)        \
> +                     break;                                              \
> +     }                                                           \
> +     obj_idx < obj_count ? obj_idx : -ENOENT;                    \
> +})

Converting all the functions to macro's is a step backwards in several ways.
 * macro's are hard to support
 * macro's lead to lots of programming errors
 * macro's look ugly

Why not use real functions, or make the example into C++ if you have
to do generic programming.

Reply via email to