Есть функция, типа:
unsgined foo(struct handle_t *handle, int32 *p, unsigned i1, unsigned i2, unsigned i3, int *err, struct a2 *a2);
a2, i[1-3] — имеют на самом деле более осмысленные названия.
проблема в том что те кто хотят использовать эту функцию или проводят code review не могут
запомнить что для чего в этой функции,
и им все время видя
foo(h, p, a + b, (c — d) << 2,...);
приходится заглядывать в ее определение чтобы понять что здесь происходит или чтобы
ее правильно вызвать.
возникла идея (используется C + gcc extensions),
сделать так
unsgined foo(struct handle_t *handle, struct request req)
{
int32 *p = req->p;
unsigned i1 = p->i1;
...
}
а вызывать так
struct request req = {
.p = p,
.i1 = a + b,
};
foo(h, &req);
код становиться понятнее,
но скорость очень критична,
не возникает ли здесь лишней траты процессорного времени?