This is an article from Samuel's Archive.

The “Clockwise/Spiral Rule”

By David Anderson, comp.lang.c, 1994-05-06

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.