"void **" : Is it valid and what does it mean?
Peter Holzer
hp at vmars.tuwien.ac.at
Tue May 28 21:59:14 AEST 1991
ok at goanna.cs.rmit.oz.au (Richard A. O'Keefe) writes:
[...good explanation why void ** isn't a pointer to any pointer
deleted...]
>> Basically what I want is a type that would coerce to a pointer to a
>> pointer to a type, for any type. Sort of one level beyond simple
>> "void *".
>Why do you want to do _that_? If you _could_ do it, you would be
>throwing away information that the receiver would need in order to
>be able to _use_ the thing? What's the context?
I don't know what the original poster wanted to do, but since I was in
the same situation once, I can give you an example why anybody would
like to do something like that.
In MARS (a real-time system developed at our department) exists a
system-call which is now defined as:
int receivem (msg_name name, void * msg, unsigned short flags);
Messages are (in C) defined as structures and there are several types.
For some reason, which is not relevant here, msg is not a pointer to
the structure, but a pointer to a pointer to structure. Of course one
common error is to define a struct foo * mymsg and then pass mymsg
instead of &mymsg. With the current prototype this error is not
detected by the compiler, but if some type `pointer to any pointer'
existed, this type of error could be catched. Unfortunately this is not
possible in C.
#pragma speculation_mode on /* :-) */
There is a rumor among C-programmers that `all struct-pointers smell
the same.' (I could not find any assertion of this in the standard, and
I can find pro's and con's for such a rule, so I call it a rumor,
undoubtedly someone who knows will tell me if it is correct or not). If
this rumor is true, a pointer to pointer to any struct would be legal
(At least there is no reason why it should not be legal). So we could
declare the systemcall above as:
int receivem (msg_name name, struct ** msg, unsigned short flags);
which is almost exactly what the designer of the system call had in
mind.
--
| _ | Peter J. Holzer | Think of it |
| |_|_) | Technical University Vienna | as evolution |
| | | | Dept. for Real-Time Systems | in action! |
| __/ | hp at vmars.tuwien.ac.at | Tony Rand |
More information about the Comp.lang.c
mailing list