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.