Sub
 
定义一个程序

语法

[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 ]
identifier :子例程中引用的变量的名称
type :变量的类型
default_value :参数的值,如果在调用中没有指定
statements :组成子例程主体的一个或多个语句

说明

子程序是可以在程序的任何时候调用的代码块。该代码可能需要执行多次,子程序通过用单个子程序调用替换这些代码块来提供简化代码的无价的手段。子程序还可以让用户扩展FreeBASIC语言以提供自定义命令。FreeBASIC内置的许多功能只是默认链接到的“运行时库”的子程序。

Sub关键字标记子例程的开头,其结尾标有End Sub.“name”参数是调用此子例程的名称。例如,如果声明为“Sub...End Sub”,则用户可以使用“foo”作为语句来执行“Sub foo”和“End Sub”之间的代码。该代码与调用子例程的代码分开执行,所以除非共享的任何变量名称都不可用于子例程。但是,可以使用参数传递值。

参数是传递给任何语句的参数。例如,如果用户执行“Print 4”的语句,则将值“4”传递给函数“Print”。需要传递给子程序的参数由“Sub”关键字中的一个或多个参数参数提供。使用“Sub mysub(foo, bar)...End Sub”创建一个子程序,允许“Sub”和“End Sub”之间的代码将第一个传递的参数称为“foo”,将第二个传递的参数称为“bar”。如果给定一个参数的默认值,该参数是可选的。

在默认方言-lang fb 中,参数也必须具有提供的类型,格式为“parameter as type ”。不允许输入后缀。

-lang qb -lang fblite 方言中,如果类型没有通过名称或类型后缀显式给出,那么它将被赋予一个默认类型。-lang qb 方言中的默认类型为Single,而-lang fblite 方言中的默认类型为Integer.

子例程还可以指定如何传递参数,如“ByRef”或“ByVal”,如语法定义所示。如果参数为“ByRef”,则参数名称将变为传递给子例程的原始变量的引用。对该变量进行的任何更改都将反映在子例程之外。但是,如果一个参数传递给“ByVal”,任何已传递的变量的值都将被复制到一个新的变量中,对它的任何更改都不会影响到原来的变量。(注意:目前不适用于String,而应暂时避免使用“ByVal”。)

Static说明符指示在子程序中定义的所有局部变量的值应在调用之间保留。要将各个局部变量指定为静态,请参阅Static关键字。

Sub与Function相同,但不允许返回值。

第二种语法分别使用ConstructorDestructor关键字定义构造函数或析构函数。构造函数子程序在模块中的第一行代码之前执行,而析构函数在模块退出时执行。请注意构造函数和析构函数的公共访问说明符和空参数列表。

例子

''使用子文字编写彩色文字的示例:

Sub PrintColoredText( ByVal colour As Integer, ByRef text As String )
   Color colour
   Print text
End Sub

   PrintColoredText( 1, "蓝色" )        ''几种颜色
   PrintColoredText( 2, "绿色" )
   PrintColoredText( 4, "红" )
   Print
   
   Dim i As Integer
   For i = 0 To 15                        ''全16色
      PrintColoredText( i, ("颜色" & i) )
   Next i

'以下演示了可选参数。

Sub TestSub(P As String = "默认")
    Print P
End Sub

TestSub "测试:"
TestSub


方言差异

与QB差别

  • 公共和私人访问说明符是FreeBASIC的新功能。
  • 构造子程序是FreeBASIC的新特性。

参考