Differences

This shows you the differences between two versions of the page.

Link to this comparison view

quotes:the_10_commandmants_of_c_programmers [2017/02/05 22:43] (current)
Line 1: Line 1:
 +<​html><​pre>​
 +          THE TEN COMMANDMENTS FOR C PROGRAMMERS (ANNOTATED EDITION)
  
 +                               BY HENRY SPENCER
 +   ​_________________________________________________________________
 +
 +1 Thou shalt run lint frequently and study its pronouncements with care, for
 +verily its perception and judgement oft exceed thine.
 +
 +   This is still wise counsel, although many modern compilers search out
 +   many of the same sins, and there are often problems with lint being
 +   aged and infirm, or unavailable in strange lands. There are other
 +   ​tools,​ such as Saber C, useful to similar ends.
 +
 +   ​``Frequently''​ means thou shouldst draw thy daily guidance from it,
 +   ​rather than hoping thy code will achieve lint's blessing by a sudden
 +   act of repentance at the last minute. De-linting a program which has
 +   never been linted before is often a cleaning of the stables such as
 +   thou wouldst not wish on thy worst enemies. Some observe, also, that
 +   ​careful heed to the words of lint can be quite helpful in debugging.
 +
 +   ​``Study''​ doth not mean mindless zeal to eradicate every byte of lint
 +   ​output-if for no other reason, because thou just canst not shut it up
 +   about some things-but that thou should know the cause of its
 +   ​unhappiness and understand what worrisome sign it tries to speak of.
 +
 +
 +2 Thou shalt not follow the NULL pointer, for chaos and madness await thee at
 +its end.
 +
 +   ​Clearly the holy scriptures were mis-transcribed here, as the words
 +   ​should have been ``null pointer'',​ to minimize confusion between the
 +   ​concept of null pointers and the macro NULL (of which more anon).
 +   ​Otherwise,​ the meaning is plain. A null pointer points to regions
 +   ​filled with dragons, demons, core dumps, and numberless other foul
 +   ​creatures,​ all of which delight in frolicing in thy program if thou
 +   ​disturb their sleep. A null pointer doth not point to a 0 of any type,
 +   ​despite some blasphemous old code which impiously assumes this.
 +
 +
 +3 Thou shalt cast all function arguments to the expected type if they are not
 +of that type already, even when thou art convinced that this is unnecessary,​
 +lest they take cruel vengeance upon thee when thou least expect it.
 +
 +   A programmer should understand the type structure of his language,
 +   lest great misfortune befall him. Contrary to the heresies espoused by
 +   some of the dwellers on the Western Shore, `int' and `long' are not
 +   the same type. The moment of their equivalence in size and
 +   ​representation is short, and the agony that awaits believers in their
 +   ​interchangeability shall last forever and ever once 64-bit machines
 +   ​become common.
 +
 +   Also, contrary to the beliefs common among the more backward
 +   ​inhabitants of the Polluted Eastern Marshes, `NULL' does not have a
 +   ​pointer type, and must be cast to the correct type whenever it is used
 +   as a function argument.
 +
 +   (The words of the prophet Ansi, which permit NULL to be defined as
 +   ​having the type `void *', are oft taken out of context and
 +   ​misunderstood. The prophet was granting a special dispensation for use
 +   in cases of great hardship in wild lands. Verily, a righteous program
 +   must make its own way through the Thicket Of Types without lazily
 +   ​relying on this rarely-available dispensation to solve all its
 +   ​problems. In any event, the great deity Dmr who created C hath wisely
 +   ​endowed it with many types of pointers, not just one, and thus it
 +   would still be necessary to convert the prophet'​s NULL to the desired
 +   ​type.)
 +
 +   It may be thought that the radical new blessing of ``prototypes''​
 +   might eliminate the need for caution about argument types. Not so,
 +   ​brethren. Firstly, when confronted with the twisted strangeness of
 +   ​variable numbers of arguments, the problem returns... and he who has
 +   not kept his faith strong by repeated practice shall surely fall to
 +   this subtle trap. Secondly, the wise men have observed that reliance
 +   on prototypes doth open many doors to strange errors, and some indeed
 +   had hoped that prototypes would be decreed for purposes of error
 +   ​checking but would not cause implicit conversions. Lastly, reliance on
 +   ​prototypes causeth great difficulty in the Real World today, when many
 +   cling to the old ways and the old compilers out of desire or
 +   ​necessity,​ and no man knoweth what machine his code may be asked to
 +   run on tomorrow.
 +
 +
 +4 If thy header files fail to declare the return types of thy library
 +functions, thou shalt declare them thyself with the most meticulous care, lest
 +grievous harm befall thy program.
 +
 +   The prophet Ansi, in her wisdom, hath added that thou shouldst also
 +   ​scourge thy Suppliers, and demand on pain of excommunication that they
 +   ​produce header files that declare their library functions. For truly,
 +   only they know the precise form of the incantation appropriate to
 +   ​invoking their magic in the optimal way.
 +
 +   The prophet hath also commented that it is unwise, and leads one into
 +   the pits of damnation and subtle bugs, to attempt to declare such
 +   ​functions thyself when thy header files do the job right.
 +
 +
 +5 Thou shalt check the array bounds of all strings (indeed, all arrays), for
 +surely where thou typest ``foo''​ someone someday shall type
 +``supercalifragilisticexpialidocious''​.
 +
 +   As demonstrated by the deeds of the Great Worm, a consequence of this
 +   ​commandment is that robust production software should never make use
 +   of gets(), for it is truly a tool of the Devil. Thy interfaces should
 +   ​always inform thy servants of the bounds of thy arrays, and servants
 +   who spurn such advice or quietly fail to follow it should be
 +   ​dispatched forthwith to the Land Of Rm, where they can do no further
 +   harm to thee.
 +
 +
 +6 If a function be advertised to return an error code in the event of
 +difficulties,​ thou shalt check for that code, yea, even though the checks
 +triple the size of thy code and produce aches in thy typing fingers, for if
 +thou thinkest ``it cannot happen to me'',​ the gods shall surely punish thee for
 +thy arrogance.
 +
 +   All true believers doth wish for a better error-handling mechanism,
 +   for explicit checks of return codes are tiresome in the extreme and
 +   the temptation to omit them is great. But until the far-off day of
 +   ​deliverance cometh, one must walk the long and winding road with
 +   ​patience and care, for thy Vendor, thy Machine, and thy Software
 +   ​delight in surprises and think nothing of producing subtly meaningless
 +   ​results on the day before thy Thesis Oral or thy Big Pitch To The
 +   ​Client.
 +
 +   ​Occasionally,​ as with the ferror() feature of stdio, it is possible to
 +   defer error checking until the end when a cumulative result can be
 +   ​tested,​ and this often produceth code which is shorter and clearer.
 +   Also, even the most zealous believer should exercise some judgement
 +   when dealing with functions whose failure is totally uninteresting...
 +   but beware, for the cast to void is a two-edged sword that sheddeth
 +   thine own blood without remorse.
 +
 +
 +7 Thou shalt study thy libraries and strive not to reinvent them without cause,
 +that thy code may be short and readable and thy days pleasant and productive.
 +
 +   ​Numberless are the unwashed heathen who scorn their libraries on
 +   ​various silly and spurious grounds, such as blind worship of the
 +   ​Little Tin God (also known as ``Efficiency''​). While it is true that
 +   some features of the C libraries were ill-advised,​ by and large it is
 +   ​better and cheaper to use the works of others than to persist in
 +   ​re-inventing the square wheel. But thou should take the greatest of
 +   care to understand what thy libraries promise, and what they do not,
 +   lest thou rely on facilities that may vanish from under thy feet in
 +   ​future.
 +
 +
 +8 Thou shalt make thy program'​s purpose and structure clear to thy fellow man
 +by using the One True Brace Style, even if thou likest it not, for thy
 +creativity is better used in solving problems than in creating beautiful new
 +impediments to understanding.
 +
 +   These words, alas, have caused some uncertainty among the novices and
 +   the converts, who knoweth not the ancient wisdoms. The One True Brace
 +   Style referred to is that demonstrated in the writings of the First
 +   ​Prophets,​ Kernighan and Ritchie. Often and again it is criticized by
 +   the ignorant as hard to use, when in truth it is merely somewhat
 +   ​difficult to learn, and thereafter is wonderfully clear and obvious,
 +   if perhaps a bit sensitive to mistakes.
 +
 +   While thou might think that thine own ideas of brace style lead to
 +   ​clearer programs, thy successors will not thank thee for it, but
 +   ​rather shall revile thy works and curse thy name, and word of this
 +   might get to thy next employer. Many customs in this life persist
 +   ​because they ease friction and promote productivity as a result of
 +   ​universal agreement, and whether they are precisely the optimal
 +   ​choices is much less important. So it is with brace style.
 +
 +   As a lamentable side issue, there has been some unrest from the
 +   ​fanatics of the Pronoun Gestapo over the use of the word ``man''​ in
 +   this Commandment,​ for they believe that great efforts and loud
 +   ​shouting devoted to the ritual purification of the language will
 +   ​somehow redound to the benefit of the downtrodden (whose real and
 +   ​grievous woes tendeth to get lost amidst all that thunder and fury).
 +   When preaching the gospel to the narrow of mind and short of temper,
 +   the word ``creature''​ may be substituted as a suitable pseudoBiblical
 +   term free of the taint of Political Incorrectness.
 +
 +
 +9 Thy external identifiers shall be unique in the first six characters, though
 +this harsh discipline be irksome and the years of its necessity stretch before
 +thee seemingly without end, lest thou tear thy hair out and go mad on that
 +fateful day when thou desirest to make thy program run on an old system.
 +
 +   ​Though some hasty zealots cry ``not so; the Millenium is come, and
 +   this saying is obsolete and no longer need be supported'',​ verily
 +   there be many, many ancient systems in the world, and it is the decree
 +   of the dreaded god Murphy that thy next employment just might be on
 +   one. While thou sleepest, he plotteth against thee. Awake and take
 +   care.
 +
 +   It is, note carefully, not necessary that thy identifiers be limited
 +   to a length of six characters. The only requirement that the holy
 +   words place upon thee is uniqueness within the first six. This often
 +   is not so hard as the belittlers claimeth.
 +
 +
 +10 Thou shalt foreswear, renounce, and abjure the vile heresy which claimeth
 +that ``All the world'​s a VAX'',​ and have no commerce with the benighted
 +heathens who cling to this barbarous belief, that the days of thy program may
 +be long even though the days of thy current machine be short.
 +
 +   This particular heresy bids fair to be replaced by ``All the world'​s a
 +   ​Sun''​ or ``All the world'​s a 386''​ (this latter being a particularly
 +   ​revolting invention of Satan), but the words apply to all such without
 +   ​limitation. Beware, in particular, of the subtle and terrible ``All
 +   the world'​s a 32-bit machine'',​ which is almost true today but shall
 +   cease to be so before thy resume grows too much longer.
 +
 +</​pre></​html>​
quotes/the_10_commandmants_of_c_programmers.txt ยท Last modified: 2017/02/05 22:43 (external edit)
Back to top
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0