Randy Kramer wrote:
But, if anybody feels like helping, I think it would help me to understand the
following macro (from textDisp.c). Maybe somebody could show me what it
looks like expanded? Or provide (or point me to) an explanation.
/* Macro for getting the TextPart from a textD */
#define TEXT_OF_TEXTD(t) (((TextWidget)((t)->w))->text)
This takes a t, which is a pointer. It gets the "w" member of the
struct it pointing to, which is a generic Widget* (which is a pointer).
It casts that to a TextWidget (which again is a pointer - don't you
love typedefs that obscure pointerness?). It gets the "text" member of
the struct it is pointing to.
This could probably be more clearly coded as a function, so I'm not sure
why it's a macro.
Basically, it's working around the fact that "w" is untyped and casts it
back to the correct type. (See below.)
Also, I have a vague understanding of the "->" operator--iiuc (google isn't a
whole lot of help here it doesn't want to search for a "->", and I don't know
the name of it). IIUC, it is used to select an element of a struct, and is
an alternate to the "." operator. Further (iiuc), the "." operator is used
in "normal" circumstances, while the "->" is used when a pointer is involved?
In C, the -> operator is just a cleaner way of writing
(*pointer).struct_member.
In my experience, in C, passing around pointers is faster than passing
around entire structs, you will probably see -> more often than .
* Anyone know why we store Widget here instead of TextWidget? It seems
to do nothing that require extra casts.
--
NEdit Develop mailing list - [email protected]
http://www.nedit.org/mailman/listinfo/develop