kirk (10/22/82)
My gripe at the way C is formatted in the "white book" is not the position
of the closing 'curly bracket', but of the opening one.
Thus instead of:-
if (......) {
..........
..........
}
I prefer to use
if (.......)
{
..........
..........
}
This makes it easier to check that brackets are paired with the one you
intended.warren (10/22/82)
I agree with those who want to code if statements as:
if ( ... )
{
.
.
.
}
Furthermore, I would make it manditory to enclose the dependent
clause in braces whenever it goes over 1 line. There is a lot of
code out there that looks like:
if (foo)
bar
It's way too tempting, particularly without a screen editor, just to
add another statement to the dependent clause without realizing that
it isn't part of the if anymore.
(I think that if you want to avoid the braces, put it all one one line!)
Warren Montgomery
(ihnss!warren)trb (10/22/82)
I like
if(foo){
a;
b;
c;
}
It's easy to see what the } delimits that way. Just zing up the page.
The conditional IS an integral part of the block, putting the { on a
separate line belittles this fact.
As for Montgomery's suggestion for the compiler to force you to use {}
for
if(foo){
one statement;
}
I think Warren should be crucified for his suggestion. No matter
how sensible it seems, suggesting that "newline should have more
syntactic significance than it already has" at this stage in the game
is clearly heathen influenced.
The loss of Warren's talents to the Bell System will be painful to us
all, we'll miss him, but I don't think he should be able to get away
with such a suggestion. (You KNOW about all the copycat crime these
days...)
Andy Tannenbaum Bell Labs Whippany, NJ (201) 386-6491minow (10/23/82)
A word or two of support for the "publication" indentation style:
if (cond) {
subordinate statements;
}
The '{' and '}' have little visual significance. Placing them in different
parts of the line -- '}' is always the left-most graphic and '{' the
right-most on the line makes them more distinct. Thus, I would reject
the format
if (cond)
{
subordinates;
}
Note, also, that in the publication style, the '}' is aligned with the
keyword (if/while/for, etc.) that initiated the clause. Putting '{'
directly under the keyword obscures the visual connection.
Finally, I would highly recommend the programmer enclosing all
subordinate statements with { }. This makes the structure explicit,
doesn't bite you when you have to add another statement (or a debugging
printout), and avoids "dangling else" problems.
Oh yes, don't ever let me catch you writing a null body on the same line:
for (sp = string; *sp != EOS; sp++); /* WRONG */
always put the ';' on the next line:
for (sp = string; *sp != EOS; sp++)
;
Martin Minow
decvax!minowmark (10/23/82)
Popular programming languages of late (Algol 68, Ada, FORTRAN 77) that
solved dangling else with a "fi" type terminator all seem to recommend
indenting along the lines of
if test then
do something
else
don't do something
endif
Notice that the "if" itself (and its associated syntax) is at one level
of indenting, and the nested statements are at the next level. If you
extrapolate this indenting style to C, you get
if (test) {
do something
} else {
don't do something
}
(You could even carry it to the Bourne extreme visible in sh and adb.)
The alternative to the above would read like
if (test)
{
do something
}
else
{
don't do something
}
which you'll notice takes an extra 3 lines. Given the current situation that
we mostly have screens with only 24 lines, any indenting practice that makes
a big cut in how much code fits on your screen at once is probably not all
that wonderful an idea.
No, I don't advocate putting 5.5 statements per line to make an entire C
source file fit on one screen. What I advocate is bigger screens. But
I do prefer the more compact style.davy (10/23/82)
#R:bunker:-17000:pur-ee:15500001:000:939
pur-ee!davy Oct 22 22:34:00 1982
Personally, I like the
if (foo) {
......
......
}
constructs, because the "close-brace" lines up with the clause
that it delimits. I have no objections to reading code which looks like:
if (foo)
{
......
......
}
However, one guy I know insists on starting his statements on the same line
as the open brace, i.e.:
if (foo)
{ ......
......
}
If you've ever tried to edit this sort of code and place a new first statement
in the loop or whatever, you'll note what a pain it is.
I find having the open and or close braces indented to the statement level
very obnoxious and difficult to read, but then I guess this is just personal
taste.
As an aside, most of the C Coding Style documents that were posted a few
months back recommended either
if (foo) { if (foo)
..... {
..... - or - .....
..... .....
} }
Sorry for rambling on so long.....
--Dave Curry
pur-ee!davysjb (10/23/82)
Oh come on, why are people suggesting forcing others to abide by their style of coding? If you read the second sentence in Kernighan/Ritchie, it says: But its absence of restrictions and its generality make it more convenient and effective ... Fine, people working on a project together should decide just what style to use, so that everyone in the group can read the code, and people writing code that they think or know others may have to read in the future should keep in mind that it should be neat and easy to read, but why restrict other people? To make a change now would lead to thousands of heartaches when people go to recompile their old code and break their old habits when writing new code.
pag@sri-unix (10/25/82)
How about
if(condition)
{
a;
b;
c;
}
?? I prefer it to the usual "if(condition){" for readability.
--peter gross