Checking function parameters/returns
IBM® Informix® 4GL makes function parameter checking at runtime. It is possible to compile a source that calls a function of another module with more (or less) parameters (or return values) as specified in the function definition.
Unlike I4GL, the Genero BDL linker can detect such programming errors when building the program. This is much better as detecting the programming error a runtime.
See the following example:
-- main.4gl
MAIN
CALL func(1,2)
END MAIN
-- mod1.4gl
FUNCTION func(a,b,c)
DEFINE a,b,c INT
END FUNCTION
With I4GL, the programming error can only be detected at
runtime:
$ c4gl -c mod1.4gl
$ c4gl -c main.4gl
$ c4gl -o main.bin main.o mod1.o
$ ./main.bin
Program stopped at "mod1.4gl", line number 2.
FORMS statement error number -1318.
A parameter count mismatch has occurred between the calling
function and the called function.
With Genero BDL, the programming error is detected at link
time:
$ fglcomp mod1.4gl
$ fglcomp main.4gl
$ fgllink -o main.42r main.42m mod1.42m
ERROR(-6200):Module 'main': The function mod1.func(3,0) will be called as func(2,0).
Tip: Consider using IMPORT FGL to get rid of program linking with Genero!