Standard Indentation etc.

Mark A Terribile mat at mole-end.UUCP
Thu Dec 22 15:32:55 AEST 1988


> >>...8 columns is _way_ too big for an [indent].  The range recommended by
> >>everyone except C let's-torture-test-the-eyes hackers is two to five ...

> >8 columns is just fine for people who split up their code into functions
> >instead of cramming it all into giant monolithic lumps.  ...

> ...  My point is not that code runs off the right margin.  ... 8 columns
> columns is just too big a jump for the eye.  ...  I had never seen anyone
> use indent-by-8 before I met C:  good Fortran programmers used 2 to 5, good
> COBOL programmers used 2 to 5, good Algol programmers used 2 to 5, good
> PL/I programmers used 2 to 5, good BCPL programmers used 2 to 5, ...

At one time, good house paint was based on lead white.

I don't find 8 columns to be torture for the eyes.  Indeed, I find anything
much less to be hard to see.  Perhaps it's because I like to lean back and
take the long view ;^}  I *do* have code running off the far margins, in
part because I use moderately long identifiers, in part because I use plenty
of white space in line, and in part because I use the expression syntax of
C (and of C++, whose expression syntax is even more potent) for all its worth
*WITHOUT* becoming obscure.  This means that I must split lines; I split them
at points that are clearly NOT indentation columns--unless I am writing
something like

	printf( format,
		key_p->mark,
		key_p->instances == 1 ? "" : "s",
		key_p->descr->use,
		Camb_TYPENAME( key_p->descr->type ),

    etc.

A better question is why other languages use such small indents.

In FORTRAN, of course, it's rare to see 200 lines of 10-line functions; in
C it can be fairly common.  The larger external compilation units will call
for more levels of indentation.  Moreover, up until recently, the FORTRAN
``do'' was brain-damaged and had to be protected by an ``if'' from looping
once when it should loop zero times.  Programmers who wrote that as two levels
of control structure would end up with a double-indent; programmers who
considered it a single (synthetic) control structure would write it as one.

The problem of formatting ``synthesized'' control structures infects other
languages as well; a pass through *The Elements of Programming Style* will
show all sorts of trouble that people have made for themselves in this way.

Pascal is a special case; its small-minded expression syntax and control
structures are unexampled in languages written by people who ought to know
better.  (Yes, I'm flaming.)  The inability to write short-circuit evaluations
and to accomplish even modest operations like assignment inside tests forces
multiple levels of ``if'' and redundant ``else'' clauses.  Moreover, it
forces natural operate-and-test-at-the-top loops into operate, test, set
flag, if-not-flag, test-at-bottom constructions.  Often three or four levels
are needed to synthesize one control structure.  The inability to do an early
return also forces cases to be nested in if-then-elses, and the rote approach
to control structure encouraged by the mess leads people to mindlessly indent
else-if's whether it reflects the nature of the problem or not.

I can't speak for Algol (which one?) or BCPL, but PL/I's label-directed
syntax and lack (in most versions) of early exit encourage or force the
same problems of synthesized control structures that plague FORTRAN; when
PL/I is used for ``FORTRAN with semicolons'' the problem is even worse.

COBOL is a world unto itself; even the people who continue to use it and
specify it wish they had something better that ``felt'' like good old familiar
COBOL and had all of the indispensible arcana that COBOL supports.  It's
hardly an universal example of programming style.

Small indentation is an irritating solution to a family of problems that C
just does not have.  Why carry it around?

Of course, if you are using a screen whose typeface is so poor that you have
to lean 5'' close to it to read your program, then the 2-space indent is
easily explained ;^}
-- 

(This man's opinions are his own.)
>From mole-end				Mark Terribile



More information about the Comp.lang.c mailing list