66 lines
2.7 KiB
COBOL
66 lines
2.7 KiB
COBOL
CALL "No-Arguments"
|
|
|
|
*> Fixed number of arguments.
|
|
CALL "2-Arguments" USING Foo Bar
|
|
|
|
CALL "Optional-Arguments" USING Foo
|
|
CALL "Optional-Arguments" USING Foo Bar
|
|
*> If an optional argument is omitted and replaced with OMITTED, any following
|
|
*> arguments can still be specified.
|
|
CALL "Optional-Arguments" USING Foo OMITTED Bar
|
|
*> Interestingly, even arguments not marked as optional can be omitted without
|
|
*> a compiler warning. It is highly unlikely the function will still work,
|
|
*> however.
|
|
CALL "2-Arguments" USING Foo
|
|
|
|
*> COBOL does not support a variable number of arguments, or named arguments.
|
|
|
|
*> Values to return can be put in either one of the arguments or, in OpenCOBOL,
|
|
*> the RETURN-CODE register.
|
|
*> A standard function call cannot be done in another statement.
|
|
CALL "Some-Func" USING Foo
|
|
MOVE Return-Code TO Bar
|
|
|
|
*> Intrinsic functions can be used in any place a literal value may go (i.e. in
|
|
*> statements) and are optionally preceded by FUNCTION.
|
|
*> Intrinsic functions that do not take arguments may optionally have a pair of
|
|
*> empty parentheses.
|
|
*> Intrinsic functions cannot be defined by the user.
|
|
MOVE FUNCTION PI TO Bar
|
|
MOVE FUNCTION MEDIAN(4, 5, 6) TO Bar
|
|
|
|
*> Built-in functions/subroutines typically have prefixes indicating which
|
|
*> compiler originally incorporated it:
|
|
*> - C$ - ACUCOBOL-GT
|
|
*> - CBL_ - Micro Focus
|
|
*> - CBL_OC_ - OpenCOBOL
|
|
*> Note: The user could name their functions similarly if they wanted to.
|
|
CALL "C$MAKEDIR" USING Foo
|
|
CALL "CBL_CREATE_DIR" USING Foo
|
|
CALL "CBL_OC_NANOSLEEP" USING Bar
|
|
*> Although some built-in functions identified by numbers.
|
|
CALL X"F4" USING Foo Bar
|
|
|
|
*> Parameters can be passed in 3 different ways:
|
|
*> - BY REFERENCE - this is the default way in OpenCOBOL and this clause may
|
|
*> be omitted. The address of the argument is passed to the function.
|
|
*> The function is allowed to modify the variable.
|
|
*> - BY CONTENT - a copy is made and the function is passed the address
|
|
*> of the copy, which it can then modify. This is recomended when
|
|
*> passing a literal to a function.
|
|
*> - BY VALUE - the function is passed the address of the argument (like a
|
|
*> pointer). This is mostly used to provide compatibility with other
|
|
*> languages, such as C.
|
|
CALL "Modify-Arg" USING BY REFERENCE Foo *> Foo is modified.
|
|
CALL "Modify-Arg" USING BY CONTENT Foo *> Foo is unchanged.
|
|
CALL "C-Func" USING BY VALUE Bar
|
|
|
|
*> Partial application is impossible as COBOL does not support first-class
|
|
*> functions.
|
|
*> However, as functions are called using a string of their PROGRAM-ID,
|
|
*> you could pass a 'function' as an argument to another function, or store
|
|
*> it in a variable, or get it at runtime.
|
|
ACCEPT Foo *> Get a PROGRAM-ID from the user.
|
|
CALL "Use-Func" USING Foo
|
|
CALL Foo USING Bar
|