On 8/7/19 11:27 PM, Markus Armbruster wrote: >>>> /* >>>> * Function types >>>> */ >>>> typedef void SaveStateHandler(QEMUFile *f, void *opaque); >>>> typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id); >>>> +typedef void (*qemu_irq_handler)(void *opaque, int n, int level); >> >> Should we prefer a consistent form for function pointer typedefs? Here, >> we've mixed 'rettype Name(params)' with 'rettype (*name)(params)'. > > Which of the two difference I can see do you mean?
Both :) > > CamelCase vs. lower_case_with_underscore? Indeed, choosing a consistent naming convention to make it obvious we are referring to a typedef naming a function signature may be useful. > > Parenthesis around the type name? I wouldn't call that inconsistent, we > simply use parenthesis only when needed. And the question of whether the * is implied by the typedef itself (which we tend to avoid for typedefs to structures) or must be supplied at the point of use. It gets odd since C permits both 'FuncType f = myfunc' and 'FuncType f = &myfunc', and since invoking through a function pointer can be done as both 'f(args)' and '(*f)(args)'. However, since we only have 3 uses total that declare a use of SaveStateHandler and LoadStateHandler, compared to a LOT of use of qemu_irq_handler, moving the '*' out of the declarations and into the typedef of the former is a lot easier than moving the '*' out of the typedef and into the declarations of the latter. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature