Written by

Question Kevin Furze · Apr 13, 2018

creating a macro with an unknown number of parameters

I use macros everyday, but its the first time I want to create a macro like this

I want to create a new macro whereby I can pass a variable amount of parameters

the macro (much simplified version) would be 

#define myMacro(%params)         $listBuild(any Number Of %params I pass in)

so I want to be able to call $$$myMacro(user,ID,vehicle)         ie 3 parameters would generate

$lb(user,ID,vehicle)

but equally I might want to call that same macro $$$myMacro(companyID)          ie 1 paramter and would generate

$lb(companyID)

so the question is, 

how can I create the macro without knowing how many parameters I'm passing in up front.

(Hope this makes sense)

kevin

Comments

Kevin Furze  Apr 13, 2018 to Eduard Lebedyuk

that doesn't seem to work Eduard.

here's my macro (according to you)

#define testEmptyParams(%args)    i $listfind($listbuild("%args"),"")>0 $$$quitMissingParams
here's the call

    $$$testEmptyParams(ExtID,UserID,originalVehicleID,newVehicleID,reasonID)
 

when I compile that, I get

"Too many arguments to macro: 'testEmptyParams'"

I've tried removing the quotes inside the macro and it still says too many arguments.

so I want to do a nested $lb, and then quit with another macro $$$quitMissingParams.

because I'm testing for empty parameters, I never know how many params I want to pass in.

example

s a="1",b="2" i $listfind($listbuild(a,b),"")>0 w " - missing"

s a="",b="2" i $listfind($listbuild(a,b),"")>0 w " - missing"

s a="",b="2",c=3 i $listfind($listbuild(a,b,c),"")>0 w " - missing"

s a="1",b="2",c=3 i $listfind($listbuild(a,b,c),"")>0 w " - missing"

Am I missing something ?

0
Eduard Lebedyuk  Apr 13, 2018 to Kevin Furze

Does my example compile for you?

Anyway, you should use #def1arg instead of #define as I suggested in the original answer.

0
Kevin Furze  Apr 13, 2018 to Eduard Lebedyuk

I apologise,

I am so used to using #define, I totally missed the #def1arg

so, now I change it to this, It works fine.I hadn't come across this #def1arg before.
Its an interesting use and I can think of quite a few ways already where I can create more macros to make use of it.

thanks

kevin

0