Messages in this thread | | | Date | Fri, 23 May 2008 23:49:12 +0300 | From | Adrian Bunk <> | Subject | Re: kernel coding style for if ... else which cross #ifdef |
| |
On Fri, May 23, 2008 at 10:42:28PM +0200, Willy Tarreau wrote: > On Fri, May 23, 2008 at 02:11:43PM -0500, Steve French wrote: > > A question splitting "else" and "if" on distinct lines vs. using an > > extra line and extra #else came up as I was reviewing a proposed cifs > > patch. Which is the preferred style? > > > > #ifdef CONFIG_SOMETHING > > if (foo) > > something ... > > else > > #endif > > if ((mode & S_IWUGO) == 0) > > > > or alternatively > > > > #ifdef CONFIG_SOMETHING > > if (foo) > > something ... > > else if ((mode & S_IWUGO) == 0) > > #else > > if ((mode & S_IWUGO) == 0) > > #endif > > The second one is dangerous because if code evolves, chances are that > only one of the two identical lines will be updated. > > At least the first one is clearly readable.
I would consider the first one much harder to read since you can _very_ easily miss that the "if" is in an "else" clause and completely misread the code.
> But if you have tons of > places with the same construct, it's better to create a macro which > will inhibit the if branch, which gcc will happily optimize away. > For instance : > > #ifdef CONFIG_FOO > #define FOO_ENABLED 1 > #else > #define FOO_ENABLED 0 > #endif > > if (FOO_ENABLED && foo) > something > else if ((mode & S_IWUGO) == 0) > ... >...
I'd also say that's the best solution.
> Regards, > Willy
cu Adrian
--
"Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed
| |