[PD] "sorry: only 5 args typechecked; use A_GIMME"

IOhannes m zmoelnig zmoelnig at iem.at
Mon Feb 13 10:03:25 CET 2017


On 2017-02-12 22:23, Chris Chronopoulos wrote:
> registered with class_new(..., A_DEFFLOAT) be sufficient for this simple
> case? this worked for me on 0.43.4; why doesn't it work in 0.47?
> 

oh.

of course Pd can do *that* for you.
the problem here is, that your code is just bogus:
class_new() expects a variable number of arguments.
but in C there is no way to determine the actual number of arguments
passed to the function.
So you need to somehow tell the called function when it should stop to
expect more arguments.

this can either be done by putting that number into one of the
function-arguments. an example is the `dsp_add()` function. e.g.:

    dsp_add(clip_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);

the second argument (4) tells the dsp_add() function that there are 4
more arguments to come.

alternatively (if the data permits it), you can use a special
"terminating") element with a magic value (usually this is just NULL);
the function would then read it's arguments one by one until in
encounters that special argument, after which it would stop.
this is the case with the class_new() function. e.g.:

    clip_class = class_new(gensym("clip~"), (t_newmethod)clip_new, 0,
        sizeof(t_clip), 0, A_DEFFLOAT, A_DEFFLOAT, 0);

the varidiac part is "A_DEFFLOAT, A_DEFFLOAT" and it *must* be
0-terminated. so class_new() knows that there are only two (2) more
valid arguments.

it seems that with your call to class_new(), you were just "lucky" and
the compiler you used back then with Pd-extended happened to insert a
NULL value after your A_DEFFLOAT.
so your statement "this worked for me on 0.43" should actually read:
"this accidentally happened to work for *me* at some point".

but really you were relying on undefined behaviour, and should just fix
the original code.

fgamsdr
IOhannes

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20170213/11e833a0/attachment.sig>


More information about the Pd-list mailing list