%NUMARGS

Return the number of arguments passed to a routine

WSupported on Windows
USupported on Unix
VSupported on OpenVMS
NSupported in Synergy .NET
number = %NUMARGS

Return value

number

The number of formal arguments that have associated activation arguments. See How arguments and parameters are handled for a description of the different types of arguments. (i)

Discussion

%NUMARGS returns the number of arguments passed to the current subroutine or function.

Note

For a non-^VAL function, %NUMARGS returns a value that is one greater than the number of arguments passed, because it includes the function’s return value in its count. We recommend that all functions that return an integer value be defined as ^VAL.

In Synergy .NET, %NUMARGS returns the number of the last passed argument, which can be different than the return value for traditional Synergy when there are optional arguments. For example, if a subroutine called mysub has three optional arguments, %NUMARGS will return 2 for both traditional Synergy and Synergy .NET for the first example below:

xcall mysub(arg1, arg2)

But for the following example, it will return 3 for traditional Synergy and 2 for Synergy .NET:

xcall mysub(arg1, arg2, )

And for the following, if mysub has one optional argument, %NUMARGS will return 1 for traditional Synergy but 0 for Synergy .NET:

xcall mysub()

Examples

If you call the subroutine below using the following line:

xcall sub("one", "two")

%NUMARGS returns a value of two.

subroutine sub
    arg1        ,a
    arg2        ,a
    arg3        ,a
record
    i           ,d2
proc
    for i from 1 thru %numargs
      process arguments