Using omittable parameters
- Saturday, 23 April 2011 14:22
- Last Updated on Tuesday, 30 November 1999 00:00
I have in INC file a procedure declared like this
FillSQLQ PROCEDURE(BYTE pType,BYTE pOrigin,BYTE pSQL = False)
in code if I have a call declared like this :
oDMC_Main.FillSQLQ( eDMC_Wizard , eCaseSource )
the compiler does NOT complain, would this mean having a value set in procedure declaration (the = false) is "seen" by the compiler as a default value even in a call ???
I would have thought I would need to call it with this code
oDMC_Main.FillSQLQ( eDMC_Wizard , eCaseSource ,false or true)
Mark Sarson: Any byte value would be accepted wouldn't it? So yes default would be false. So what your procedure is saying is that if I don't get a value for pSQL then set pSQL to false
JP (DMC): Hello Mark
Yes that I had understood, what "bothers" me is the fact the compiler does not complain when I call that procedure without anything there
it seems the compiler - because of the default value in declaration side) adds it for me : cool! avoids having to change all code calls ...
Mark.Goldberg: the prototype notation ...
is a notation for an OMITTABLE parameter that when omitted, is set to FALSE (in this case)
you could've coded it as
and then written in the procedure
IF OMITTED(pSQL) THEN pSQL=FALSE END
this is an example found in the LRM:
MyProc3 PROCEDURE(LONG=23) !Passes 23 if omitted
note: I strongly prefer seeing the label name in prototypes but of course they are not required. see LRM "Prototype Parameter Lists"
type [ label ] = default
A default value indicates the numeric parameter is omittable, and if omitted, the default value is passed. The OMITTED procedure will not detect the omission--a value is passed. Valid only on simple numeric types.
Notice the last sentence.... Valid only on simple numeric types.
JP (DMC): OH so that is why
Mark.Goldberg: it seems to me that many folks don't know all that they could about prototypes, here are some from %cwroot%\libsrc\builtins.clw
OPEN(FILE,UNSIGNED = 022H),NAME('Cla$FILE_OPEN')
there are quite a few more with defult parameters in there