Re: coding style for long conditions (WAS: Re: [PATCH 25/90] ... blinky leds!!)

Scott Preece
2007-04-08T13:24:59Z

On 4/6/07, Stefan Richter <stefanr@s5r6.in-berlin.de> wrote:
> David Brownell wrote:
> [...]
> >>> 1 if (To control chain reactions, your odds
> >>> 2 Improve if you've got cadmium rods) {
> >>> 3 In your fission reactor
> >>> 4 Their lack is a factor
> >>> 5 }
> >>> 6 In screams of "A meltdown! Ye gods!"
> >>>
> >>> Now, the former makes it hard to tell what's condition vs consequent.
> >>> (Or whatever the correct technical term is in cases like these.)
> >> My fu dictates that continuation lines (line 2 in this example)
> >> should have more indent than line 1,
> >
> > Yes. Where "indent" is measured -- always!! -- in tabs.
> > Documentation/Coding style is quite explicit on that point:
> >
> > Outside of comments, documentation and except in Kconfig,
> > spaces are never used for indentation ...
>
> I usually indent this way if expressions exceed the 80 columns limit:
>
> if (foo___________ &&
> bar___________) {
> doit;
> }
---

I disagree vigorously - the operators should be at the front of the
line, so that the logical structure is clear. [The editor I'm doing
this in won't let me use tabs, so I won't even try to do an
example...]

As other people have noted in this thread, it's a rule that would earn
Emerson's "foolish consistency" label, if it actually were followed
slavishly. In fact, the kernel looks like people tend to do the right
thing, rather than always following the letter of the law.

Tab indenting is a good rule for the general case, but there are also
places (and breaking long conditionals is at the top of the list)
where it's much more important to express the structure, and the
structure has too many logical sub-points to line up with the
relatively small number of 8-space tabs available in an 80-character
line.

Of course, expressions too complicated to fit the rule are also a sign
that you might want to simplify things...

scott