function returning pointer to itself
olson
olson at batcomputer.tn.cornell.edu
Wed Jul 13 16:41:26 AEST 1988
In article <5485 at batcomputer.tn.cornell.edu> olson at tcgould.tn.cornell.edu (olson) writes:
>Does the new C standard have a natural way to declare a
>function that returns a pointer to itself
>????
Thanks to all the people that replied to my question.
Everyone said effectively, "NO, this can not be done NATURALLY in C"
(which is the response I expected)
BUT you can mock it up by
1) using type cast
2) encapsulation in a data structure
That C can't do this naturally bugs me.
What do people think of the following proposal?
Define a new primative type 'self' (not a very good name ...)
self *p; means p points to something that
points to something that ...
or p points to itself
p->p->p->p->p->...
self *f(); means f is a function returning a pointer to a
function returning a pointer to a ...
or f is a function returning a pointer to itself
f()->f()->f()->...
self **f() means f is a function returning a pointer to a pointer to a
function returning a pointer to a pointer to a ...
or ???
f()->p->f()->p->f()->p->...
self *(*p)() means p is a pointer to a function returning a pointer to a
pointer to a function returning a pointer to a ...
or ???
p->f()->p->f()->p->f()->...
That is, 'self' sets up a definition that is "solved" by iteration
(but that is NOT how you implement it)
self *(*p)() => p=*(*p)() = *(*(*(*p)()))() = ...
Note that self must always involve pointers, self p is not allowed.
Further one could write
p->f()->f()->f()->f()->...
as
typedef self *state();
state *p;
Without typedefs this would not be possible to express,
unless further syntax modifications were made, such as
self *<*p>(); means p->f()->f()->f()->...
self *<f()>; means f()->p->p->p->...
where the <> indicate the part that is to be iterated on
ie self *<f()> => <f()>=*<f()> rather than f = *<f()>
SIDE ISSUE: (independent of self)
Note in the same way that it is impossible to declare a function
using the typedef
typedef int myfunc();
because
myfunc f(){}; means int (f())(){};
which is illegal,
it is impossible to declare a function
state f(){};
This is something that bugs me too.
Would it screw up the intuitiveness of typedefs too much
to define myfunc f(){}; to mean int f(){};
since the only other meaning is illegal????????
COMMENTS
1) I don't see how 'self' would pose any implementation problems.
(on the other hand I have never written a compiler, only thought about it)
2) There have been enough occasions where I could have used this primative
that I would call it a useful feature.
3) It might be opening a pandora's box. Consider, someone might say, well
I want f()->p->f()->p->p->f()->p->p->p->f()->...
or one where the number of p's are the digits of PI.
Well, what can I say. These would be a lot harder to implement.
I haven't been able to conceive of a use for them.
4) It is probably to late to add this primative to the new C standard.
Todd Olson
olson at helios.tn.cornell.edu
Physics Dept/ Cornell Univ/ Ithaca NY 14853
More information about the Comp.std.c
mailing list