This book began life in 1987 as one of the early books on C
programming. I wrote it during a summer vacation from University, in
England in 1987. It was published by Dabs Press, a small publishing
house which specialized in books for microcomputers, particularly
Acorn's classic BBC micro. With the arrival of the Amiga, I was able
to obtain a C compiler. I had had my eye on C for some time, and I
felt at the time, that it was the best language I had seen to date for
system programming. The publisher and I decided that C would become
the `BASIC' of the 16-bit microcomputer world, which it did. C took
off, and the book sold very well for a number of years. As the
contract expired, the book was lost in my files, until I met Richard
Stallman and he asked me if I would give the tutorial to GNU. I agreed
to recover the original files from diskettes and partly re-work them,
to remove the emphasis from micro-computers and over to GNU. The
result of that work was the first version of the tutorial. Having
handed over the merchandise, I agreed that it would be a good thing
for others to update and improve the tutorial. My only requirement was
that I would be allowed to explain a few changes for which I would not
want to be blamed. I cannot insist that such changes will not be made,
but I can at least distance myself from them. They are fairly picky
and even silly things, but for one reason or another, they mean a lot
to me. The first has to do with grammar. The grammar which is written
and printed in books today is often incorrect. Many colloquialisms and
vernacular perversions of grammar are printed and believed to be
correct. I am fairly sure that no such errors are mine! The other
thing has to do with the style and formatting of C code. The placement
of curly braces is something about which I agree with only a handful
of people on the planet. Kernighan and Ritchie's original placement of
curly braces is so horrendous that I would go so far as to call it
"wrong", logically and aesthetically. The GNU indentation, which
positions braces of the same level in straight vertical alignment, is
much better, but in my opinion it gets its indentation wrong. I would
indent 3 positions before the first brace, and keep the text within
braces aligned with the braces themselves, rather than indenting
within the braces, as GNU does. That, in my personal opinion, makes it
easier to identify text and braces belonging together, and leads to
optimal clarity. I also insist that curly braces be used around single
statements, in loops and tests, even when not strictly required by the
language. Finally, having grown up in England and lived in Norway,
which have contradictory punctuation rules, I am utterly confused
about punctuation and have probably made many errors. With that little
spiel said, I now pass the torch to future authors and wish everyone
luck. I am happy to see an old summer job not go to waste.