Skip to content

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_listparameter[, parameter[, ...]]
    • [ByRef|ByVal] identifier [As type] [= default_value]
    • 数组参数:identifier 后跟 () — 始终为 ByRef。
  • return_type — 返回值的数据类型。
  • return_value — 要返回的值。

说明

函数定义了一个可以通过单条语句调用的代码块,并向调用方返回一个值。

访问权限: PublicPrivate 指定模块级访问权限,默认为 Public

调用约定: CDeclPascalStdCall 指定参数压栈/弹栈顺序,默认为 StdCall

返回值: 有三种方式返回值:

  1. Return value — 立即退出并返回该值。
  2. Function = value — 设置返回值但不退出。
  3. 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 除外)默认为 ByValString 和 UDT 默认为 ByRef
  • -lang qb-lang fblite 中,默认为 ByRef
  • -lang qb 中,必须通过给函数名赋值来指定返回值;不允许使用 Function = ...

与 QB 的区别

  • FreeBASIC 中参数可以是可选的。
  • 返回类型可以用 As TYPE 指定。
  • Return 语句可以指定返回值。
  • FreeBASIC 支持函数重载。
  • 函数返回值可以被忽略。

另请参阅

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系