Subject: Re: slightly off topic: [*]
To: Perry E. Metzger <perry@piermont.com>
From: Ian Lance Taylor <ian@airs.com>
List: tech-toolchain
Date: 09/22/2005 22:42:04
"Perry E. Metzger" <perry@piermont.com> writes:

> Slightly off topic but I figure this is as good a place to ask as any
> -- does anyone here understand what the C99 "[*]" syntax is for? So
> far I've asked lots of smart people and no one can answer.

Do you mean, what does it mean?  Or do you mean, why does it exist?

I can tell you what it means.  It can be used in a function prototype
to mean that the parameter is a variable length array but that the
prototype does not say what the actual length is.  For example,
    int foo (int i, int a[*]);
is a prototype for a function which returns foo and takes two
parameters, one of type int and the other being a variable length
array.  You can't use [*] in a function definition.  In the
definition, you might say
    int foo (int i, int a[i]) { }
to mean that the variable length array a has i elements.

I'm not too sure why it exists.  I think the main advantage is when
you have a multi-dimensional array, as in
    int foo (int i, int j, int a[i][j]) { }
In that case there may be some advantage to being able to say in the
function prototype:
    int foo (int i, int j, int a[*][*]);
since that is in some sense different from:
    int foo (int i, int j, int **a);
Or maybe that's not the reason.  I'm not sure.

Of course variable length arrays, and the ability for a parameter to
refer back to an earlier parameter, are new in C99.

Ian