从一个主程序中可以将参数传递到局部或全局子程序和函数中。
怎样传递参数有 2 种方式:
作为 IN 参数
变量值在主程序中保持不变。
这种传递方式也称为 “ 值传递 (Call by Value)”。
作为 OUT 参数
子程序读取并更改该值,然后将新值写回到主程序中。
这种传递方式也称为 “Call by Reference”。
建议:始终将一个参数传递到相同数据类型的变量中。可以将参数传递到另一个数据类型中,但是有特定的限制。
将参数传递给局部子程序:
两类参数列表:
传值调用: IN
引用调用: OUT
例:
1 DEF MY_PROG( )
2 DECL REAL r,s
3 ...
4 CALC_1(r) 调用子程序 CALC_1 并传递参数 “r”。
5 ...
6 CALC_2(s) 调用子程序 CALC_2 并传递参数 “s”。
7 ...
8 END
_______________________________________
9 DEF CALC_1(num1:IN)
num1:要将值 “r” 传递到其上的变量名称。IN 表示:只为读取传递 “r”。
10 DECL REAL num1 必须声明要将数值传递到其上的变量。
11 ...
12 END
_______________________________________
13 DEF CALC_2(num2:OUT)
num2:要将值 “s” 传递到其上的变量名称。
OUT 表示:传递、更改 “s” 并将其写回到主程序中。
14 DECL REAL num2 必须声明要将数值传递到其上的变量。
15 ...
16 END
将参数传递给全局函数:
主程序 MY_PROG( ):
1 DEF MY_PROG( )
2 DECL REAL result, value
3 value = 2.0 给 “value” 赋值 “2.0”。
4 result = CALC(value) 调用函数 CALC,并传递 “value” 的值。给变量 “result” 分配函数的返还值。
5 ...
...
END
在将该值作为 IN 参数传递时发生了什么?
带 IN 的函数 CALC():
1 DEFFCT REAL CALC(num:IN)
将 “value” 的值作为 IN 参数传递给 “num”。该值还为 2.0。
2 DECL REAL return_value, num
3 num = num + 8.0 更改 “num” 的值。该值现在为 10.0。
4 return_value = num * 100.0
5 RETURN(return_value)
计算 “return_value” 的值并将该值发回到主程序的变量“result” 中。该值为 1000.0。
6 ENDFCT
函数已结束,从行 5 起继续执行主程序。
提示:主程序中 “value” 的值未更改,为 2.0
在将该值作为 OUT 参数传递时发生了什么?
带 OUT 的函数 CALC():
1 DEFFCT REAL CALC(num:OUT)
将 “value” 的值作为 OUT 参数传递给 “num”。该值还为 2.0。
2 DECL REAL return_value, num
3 num = num + 8.0
更改 “num” 的值。该值现在为 10.0。
4 return_value = num * 100.0
5 RETURN(return_value)
计算 “return_value” 的值并将该值发回到主程序的变量“result” 中。该值为 1000.0。
6 ENDFCT
函数已结束,从行 5 起继续执行主程序。
提示:主程序中 “value” 的值现在为 10.0。
传递多个参数:
将哪个参数传递给什么自动通过顺序确定:第一个参数被传递到子程序中的第一个参数上,第二个参数被传递到子程序中的第二个参数上,以此类推。
1 DEF MY_PROG( )
2 DECL REAL w
3 DECL INT a, b
4 ...
5 CALC(w, b, a)
将 “w” 作为 OUT 参数传递给 “ww”。
将 “b” 作为 IN 参数传递给 “bb”。
将 “a” 作为 OUT 参数传递给 “oo”。
6 ...
7 CALC(w, 30, a)
将 “w” 作为 OUT 参数传递给 “ww”。
将 “30” 作为 IN 参数传递给 “bb”。
将 “a” 作为 OUT 参数传递给 “oo”。
8 ...
9 END
_______________________________________
10 DEF CALC(ww:OUT, bb:IN, oo:OUT)
11 DECL REAL ww
12 DECL INT oo, bb
13 ...
14 END
也可以不将任何值传递给子程序中的 “ 接收器 ” 变量,前提是在子程序中不需要该值。这将简化根据变化的过程调整程序。示例:CALC (w, ,a)
始终可以将数值传递至相同的数据类型。传递至另一个数据类型时,有:
主程序中的类型 | 子程序中的类型 | 作用 |
BOOL | INT、REAL、CHAR | 无法传递;错误信息 |
INT、REAL、CHAR | BOOL | |
INT | REAL | INT 值被用作 REAL 值 |
INT | CHAR | 使用 ASCII 表中的字符 |
CHAR | INT | 使用 ASCII 表中的 INT 值 |
CHAR | REAL | 使用 ASCII 表中的 REAL 值 |
REAL | INT | REAL 值被四舍五入 |
REAL | CHAR | REAL 值被四舍五入,使用 ASCII 表中的字符 |
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !