Hi all -
I don't know if this is a reasonable thing to do in 2014 - it's a coding trope I learned around 1981. As far as I know C has no clean way to describe a packed data structure with a header and then a variable number of identical elements (like a soundfile with a header followed by samples). In this case, the object consists of a structure,
t_gobj sc_gobj;
t_symbol *sc_template;
followed in memory by an array of t_words. One can't make a zero-size arary in standard C (as far as I know) and so it's declared as having the artificial size 1. If there are n elements, the size of the structure is
sizeof(t_scalar) + (n-1) * sizeof(t_word)
subtracting 1 for the one that stood in for the array.
cheers Miller
On Thu, Feb 20, 2014 at 06:32:48PM -0800, Jonathan Wilkes wrote:
Can anyone explain what's going on with this in m_pd.h:
typedef struct _scalar     /* a graphical object holding data */ {    t_gobj sc_gobj;        /* header for graphical object */    t_symbol *sc_template; /* template name (LATER replace with pointer) */    t_word sc_vec[1];      /* indeterminate-length array of words */ } t_scalar;
How is a static t_word array of size 1 an indeterminate-length array? Is its placement as the last member of the struct required?
I see lots of mysterious casts in the internals of Pd's data structures. What's the trick here, and is it documented anywhere on the interwebs, a C standard doc, etc.?
Thanks, Jonathan
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list