Clockwise/Spiral Rule (original) (raw)

[This was posted to comp.lang.c by its author, David Anderson, on 1994-05-06.]

By David Anderson

There is a technique known as the ``Clockwise/Spiral Rule'' which enables any C programmer to parse in their head any C declaration!

There are three simple steps to follow:

  1. Starting with the unknown element, move in a spiral/clockwise direction; when ecountering the following elements replace them with the corresponding english statements:
    [X] or []
    => Array X size of... or Array undefined size of...
    (type1, type2)
    => function passing type1 and type2 returning...
    *
    => pointer(s) to...
  2. Keep doing this in a spiral/clockwise direction until all tokens have been covered.
  3. Always resolve anything in parenthesis first!

Example #1: Simple declaration

                 +-------+
                 | +-+   |
                 | ^ |   |
            char *str[10];
             ^   ^   |   |
             |   +---+   |
             +-----------+

Question we ask ourselves: What is str?

``str is an...

Example #2: Pointer to Function declaration

                 +--------------------+
                 | +---+              |
                 | |+-+|              |
                 | |^ ||              |
            char *(*fp)( int, float *);
             ^   ^ ^  ||              |
             |   | +--+|              |
             |   +-----+              |
             +------------------------+

Question we ask ourselves: What is fp?

``fp is a...

Example #3: The ``Ultimate''

                  +-----------------------------+
                  |                  +---+      |
                  |  +---+           |+-+|      |
                  |  ^   |           |^ ||      |
            void (*signal(int, void (*fp)(int)))(int);
             ^    ^      |      ^    ^  ||      |
             |    +------+      |    +--+|      |
             |                  +--------+      |
             +----------------------------------+

Question we ask ourselves: What is `signal'?

Notice that signal is inside parenthesis, so we must resolve this first!

The same rule is applied for const and volatile. For Example:

const char *chptr;

How about this one:

char * const chptr;

Finally:

volatile char * const chptr;

Practice this rule with the examples found in K&R II on page 122.


Copyright © 1993,1994 David Anderson

This article may be freely distributed as long as the author's name and this notice are retained.