Skip to content

SUB

来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgSub 最后更新: 2023-08-30

定义过程(子例程)。

语法

[Public|Private] Sub identifier [CDecl|Pascal|StdCall] [Overload] [Alias "external_identifier"] [( [parameter_list] )] [Static] [Export]

    statements ...
    [Return] ...

End Sub

构造函数/析构函数形式:

[Public] Sub identifier [CDecl|Pascal|StdCall] [Overload] [Alias "external_identifier"] [()] [Constructor|Destructor] [Static]

    statements ...
    [Return] ...

End Sub

参数

  • identifier — 子例程的名称。
  • external_identifier — 外部可见(对链接器)的名称,用引号括起来。
  • parameter_listparameter[, parameter[, ...]]
    • parameter: [ByRef|ByVal] identifier [As type] [= default_value]
      • 如果参数是数组,标识符后必须跟空括号 ()
      • default_value 可以是字面量、常量或共享变量。

说明

子例程是可以在程序中任意时刻调用的代码块。Sub 关键字标记子例程的开始,End Sub 标记其结束。

变量对子例程是局部的,除非它们是共享的。可以使用参数传递值。如果参数有默认值,则该参数是可选的。

数组参数始终是 ByRef 的;数组参数既不需要也不允许使用 ByRef 关键字。

在默认方言 -lang fb 中,参数必须提供类型(As type)。在 -lang qb-lang fblite 中,如果未给出类型则假定使用默认类型。

Static 说明符指示子例程中定义的所有局部变量的值在调用之间应被保留。

构造函数子例程在模块中第一行代码之前执行,而析构函数在模块退出时执行。

示例

vb
' Example of writing colored text using a sub:
Sub PrintColoredText( ByVal colour As Integer, ByRef text As String )
    Color colour
    Print text
End Sub

PrintColoredText( 1, "blue" )
PrintColoredText( 2, "green" )
PrintColoredText( 4, "red" )
vb
' The following demonstrates optional parameters.
Sub TestSub(P As String = "Default")
    Print P
End Sub

TestSub "Testing:"
TestSub

方言差异

  • -lang qb-lang fblite 方言保持 QB 约定:参数默认为 ByRef
  • -lang fb 方言中,数值参数默认以 ByVal 传递。字符串和 UDT 默认以 ByRef 传递。

与 QB 的区别

  • Public 和 Private 访问说明符是 FreeBASIC 新增的。
  • 构造函数子例程是 FreeBASIC 新增的。

另请参阅

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