tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: KNF and the C preprocessor
On Tue, Dec 11, 2012 at 06:10:09AM +0000, David Holland wrote:
> On Tue, Dec 11, 2012 at 01:27:09AM +0000, Roland C. Dowdeswell wrote:
> > As an example, I often define a macro when I am using Kerberos or
> > GSSAPI that looks roughly like:
> >
> > #ifdef K5BAIL(x) do {
> > ret = x;
> > if (ret) {
> > /* format error message and whatnot
> > * in terms of #x.
> > */
> >
> > goto bail;
> > }
> > } while (0)
>
> The code like this in src/sys/nfs is a reliably steady source of
> problems, and I'd argue that macros of this form are not at all worth
> the problems they cause.
Absolutely, that is one construct I would ban.
Encapsulating so you can do:
if (K5BAIL(xxx(....), "error text"))
goto bail;
Or even separating the function name (so it can be traced)
at least leaves the flow control obvious.
If you embed a goto (or return) in a #define you'd better have the
defininition very close to the use.
David
--
David Laight: david%l8s.co.uk@localhost
Home |
Main Index |
Thread Index |
Old Index