您的位置:首页 > 其它

FreeBASIC学习笔记——2.2 变量的声明

2017-12-11 20:52 190 查看
        变量其实就是对某一内存定义名称并加以操纵。变量名必须是由字母、数字和字符“_”(下划线)组成,不能包含其他字符或者空格,且这些变量名不能与FreeBASIC的关键字相同,因为关键字属于FreeBASIC语言的一部分。FreeBASIC的变量名称是不区分大小写的,即TEXT和text编译器会认为是同一个变量,这点必须注意。

        在-lang fb语言规则中,变量必须声明才能使用,且不能用类型后缀来声明,FireFly默认就是这种语言规则,在其他语言规则,如-lang qb和-lang fblite可以定义Option Explicit强制编译器必须声明变量才可以使用,这两种语言规则如果不声明(也没有定义Option Explicit)也可以使用变量,这种变量我们称为隐式变量,隐式变量由于没有定义数据类型,容易造成隐患。

        在FreeBASIC中,可以使用Dim语句和Var语句定义变量。当变量作为参数传递给函数(Function)或者过程(Sub)使用时,变量也可用。

2.2.1 Dim声明变量

1、变量声明

        Dim可用于声明和赋值任何受支持的数据类型,用户定义类型或枚举的变量。根据声明变量或数组的位置和方式,可以更改内存中的赋值方式。通过用逗号分隔每个变量声明,可以在单个Dim语句中声明多个变量。

语法:



        这里必须注意,如果要声明全局变量必须加上Shared关键字,否则变量只能是局部变量。(具体使用将在变量的作用域里说明)

例如:



2、变量初始化

    FreeBASIC语言允许变量在定义时进行初始化操作,不同的类型初始化方式各有不同,语法如下(有关数组、指针和自定义类型的初始化在后文章节中再予以说明)

语法:



例如:



2.2.2 Var声明变量

        Var声明变量的变量默认是没有数据类型的,其类型在初始化表达式中隐含。在Var声明中指定显式类型是非法的。初始化表达式可以是常量或任何类型的任何变量。注意,WString不支持Var,因为没有var-len WString类型。由于处理Unicode的复杂性,这不太可能改变。由于变量的类型是根据所赋值的内容推断的,因此任何没有小数点的字面数字都将默认为Integer类型。一个数字加小数点默认为Double类型。所有ZString表达式,包括字符串文字和字符串指针将被赋予String变量类型。

语法:



例如:



2.2.3 Static声明变量

        Static是定义具有静态存储的变量,对象和数组。为变量,对象或数组指定静态存储使得它们在程序启动时被赋值并在退出时被释放。对象在被定义时被构造一次,并且在程序退出时被析构。

        当声明静态数组时,只能使用数值、常量或枚举类型作为下标的范围值。静态可变长度数组必须被声明为空(无下标范围),并在使用前使用ReDim进行调整大小。

在迭代和递归块中,如循环控制流程语句或过程,块的本地的静态变量,对象和数组都保证在块的所有实例中占用相同的存储空间。例如,直接或间接调用它们的过程共享其本地静态变量的相同实例。

        一个静态变量只能用一个常量值初始化:在任何代码运行之前,它的起始值被设置在程序的开始处,因此它不能依赖于任何变量或函数。

当与模块级和成员过程声明一起使用时,Static为所有局部变量、对象和数组指定静态存储。在模块级变量声明中,修饰符Shared可以与关键字Static一起使用,以使程序中的模块级静态变量可见。当与用户定义的类型一起使用时,Static创建静态成员程序或变量。

语法:



例如:



2.2.4 Common声明变量

声明代码模块之间共享的变量。匹配的Common语句必须出现在使用该变量的所有其他代码模块中。Shared可选参数使变量为全局,以便它可以在Sub和Function以及模块级使用。Common数组始终是可变长度的,并且必须使用空参数列表()定义,并且其维度将在稍后的Dim或ReDim语句中设置。

语法:



例如:

1、在模块1中定义



2、在模块2中定义



2.2.5 Extern 声明变量

        Extern是用来声明具有外部链接的变量,数组或对象。声明Symbolname为外部名称,这意味着它对于外部模块是全局的。Extern仅声明变量,数组和对象,并且不定义它们(不同于Common或Dim)。它也具有Symbolname一个Shared 名称的作用,这意味着它在过程中可见。声明为外部名称的Symbolname只能在单个外部模块中定义(使用Dim或Redim)。如果使用Alias,则AiasName 将用作外部名称而不是Symbolname,并且将保留其大小写。如果使用Import,该名称将被添加到动态库导入列表中,因此其地址可以在运行时修复。

语法:



例如:

1、在模块1中



2、在模块2中



2.2.6 Scope(范围块)的声明

        FreeBASIC中允许声明一个范围块,范围块允许在程序中临时(重新)定义和使用变量。当变量在范围结构内被定义为Dim时,该临时变
4000
量可以从其定义直到范围的结尾使用。在此期间,具有相同名称的范围之外的任何变量将被忽略,并且不会被该名称访问。重定义变量之前范围块中的任何语句将使用范围之外定义的变量。

语法:



例如:



结果为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息