Bryan C. Warnock:
# On Tuesday 26 February 2002 22:17, you wrote:
# > How is this the case? STRING ** and Parrot_String * are equivalent.
# > You can use & on both a STRING * and a Parrot_String to get
# a STRING**
# > (a.k.a. a Parrot_String *). I don't see where the problem is.
#
# Ah, except that you had a different typedef for both the
# type, and a pointer
# to that type.
#
# typedef FOO Parrot_Foo;
# typedef FOO * Parrot_Foo_ptr; /* or typedef Parrot_Foo *
# Parrot_Foo_ptr; */
No, I'm not. I am *not* proposing an _ptr typedef.
My original example was:
struct foo_t;
typedef struct foo_t * FooPtr;
typedef struct foo_t FOO;
It wasn't necessarily part of Parrot in this example, so I said FooPtr
instead of Parrot_Foo. Sorry if this confused you. Here's what I
meant:
struct parrot_foo_t;
typedef struct parrot_foo_t * Parrot_Foo;
typedef struct parrot_foo_t FOO;
For a concrete example of this sort of thing, I use the string system:
struct parrot_string_t;
typedef struct parrot_string_t * Parrot_String;
typedef struct parrot_string_t STRING;
# void func () {
# FOO gork;
# bar(&gork);
# }
#
# void bar ( /* What goes here? */ ) {
# }
#
# I'd argue for 'Parrot_Foo *'. Programmers know that when you
# pass in an
# address, expect a pointer on the other end. But with your
# typedef for the
# pointer thing, you're saying it should be 'Parrot_Foo_ptr' -
# do you expect
# the users to a) look that up?, and b) actually do that?
I agree. My only question is, should that be Parrot_Foo * or Parrot_Foo
**? I think Parrot_Foo *, since embedders and extenders should never
see a 'struct parrot_foo_t', because it's just a forward declaration to
them--the internals of those structures are internal to Parrot.
--Brent Dax
[EMAIL PROTECTED]
Parrot Configure pumpking, regex hacker, embedding coder, and boy genius
#define private public
--Spotted in a C++ program just before a #include