FUNCTION
来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgFunction 最后更新: 2023-08-30
定义一个返回值的过程。
语法
[Public|Private] Function identifier [CDecl|Pascal|StdCall] [Overload] [Alias "external_identifier"] [([parameter_list])] [ByRef] As return_type [Static] [Export]
statements
...
{ {Return [return_value]}|{Function = return_value}|{identifier = return_value} }
...
End Function参数
- identifier — 函数名称。
- external_identifier — 用于链接器的外部可见名称,用引号括起。
- parameter_list —
parameter[, parameter[, ...]][ByRef|ByVal] identifier [As type] [= default_value]- 数组参数:identifier 后跟
()— 始终为 ByRef。
- return_type — 返回值的数据类型。
- return_value — 要返回的值。
说明
函数定义了一个可以通过单条语句调用的代码块,并向调用方返回一个值。
访问权限: Public 和 Private 指定模块级访问权限,默认为 Public。
调用约定: CDecl、Pascal、StdCall 指定参数压栈/弹栈顺序,默认为 StdCall。
返回值: 有三种方式返回值:
Return value— 立即退出并返回该值。Function = value— 设置返回值但不退出。identifier = value— 设置返回值但不退出。
函数也可以通过 ByRef As return_type 返回引用。
警告: 必须始终定义返回值,否则可能产生未定义行为。
重载: Overload 关键字允许函数与其他具有不同签名的函数共用同一名称。
Static: 在过程级别使用 Static 时,局部变量在调用之间保留其值。
示例
示例 1:使用 Return
vb
Declare Function ReturnTen () As Integer
Print ReturnTen ()
Function ReturnTen() As Integer
Return 10
End Function示例 2:通过赋值给函数名返回值
vb
Function ReturnTen() As Integer
ReturnTen = 10
End Function示例 3:函数重载
vb
Declare Function ReturnTen Overload (a As Single) As Integer
Declare Function ReturnTen Overload (a As String) As Integer
Declare Function ReturnTen (a As Integer) As Integer
Print ReturnTen (10.000!)
Print ReturnTen (10)
Print ReturnTen ("10")
Function ReturnTen Overload (a As Single) As Integer
Return Int(a)
End Function
Function ReturnTen Overload (a As String) As Integer
Return Val(a)
End Function
Function ReturnTen (a As Integer) As Integer
Return a
End Function示例 4:可选参数
vb
Function TestFunc(P As String = "Default") As String
Return P
End Function
Print TestFunc("Testing:")
Print TestFunc示例 5:数组参数
vb
Function x(b() As Double) As Integer
x = UBound(b)-LBound(b)+1
End Function
Dim a(1 To 10) As Double
Print x(a())方言差异
- 在
-lang fb中,内置类型(String除外)默认为ByVal;String和 UDT 默认为ByRef。 - 在
-lang qb和-lang fblite中,默认为ByRef。 - 在
-lang qb中,必须通过给函数名赋值来指定返回值;不允许使用Function = ...。
与 QB 的区别
- FreeBASIC 中参数可以是可选的。
- 返回类型可以用
As TYPE指定。 Return语句可以指定返回值。- FreeBASIC 支持函数重载。
- 函数返回值可以被忽略。