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_list —
parameter[, parameter[, ...]]- parameter:
[ByRef|ByVal] identifier [As type] [= default_value]- 如果参数是数组,标识符后必须跟空括号
()。 default_value可以是字面量、常量或共享变量。
- 如果参数是数组,标识符后必须跟空括号
- parameter:
说明
子例程是可以在程序中任意时刻调用的代码块。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 新增的。