最近要做个小东西,从网上得到一段参考代码,可是里面的数据定义把我弄迷糊了。语句如下:Dim KeyDecimal%, KeyMinus%, KeyE%
Dim SD$, SM$, myKeyDecimal%
Dim X1!, X2!, Y1!, Y2!跟vb6.0用的dim格式 “dim sth as sth”不同,这些定义只是在变量末尾加一些比如“%” “!” “$”之类的符号。不知道是不是老版本的Visual basic 里面允许这种定义方式。我是从6.0开始接触的。所以这些定义方式让我一时摸不着头脑。希望高人指点。不胜感激!

解决方案 »

  1.   

    关于楼主的问题,首先要说一下变量的定义 。
    定义变量可以使用显式或隐式两种方式定义: 
    1、显式定义:Dim 变量名 As 类型 
    2、隐式定义:使用类型说明符 
    类型说明符如下: 
    %——整型 
    &——长整型 
    !——单精度浮点数 
    #——双精度浮点数 
    @——货币型 
    $——字符串型 
    楼主的情况就属于第二种——隐式定义。DIM A$表示定义一个变量A,类型为字符串型。 
      

  2.   

    Dim KeyDecimal%, KeyMinus%, KeyE% 
    Dim SD$, SM$, myKeyDecimal% 
    Dim X1!, X2!, Y1!, Y2!
    见:
    Single 数据类型(! 数据类型)
    Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。Single 的类型声明字符为感叹号 (!)
    Integer 数据类型(% 数据类型)
    Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。Integer 的类型声明字符是百分比符号 (%)
    Double 数据类型(# 数据类型)
    Double(双精度浮点型)变量存储为 IEEE 64 位(8 个字节)浮点数值的形式,它的范围在负数的时候是从 -1.79769313486232E308 到 -4.94065645841247E-324,而正数的时候是从 4.94065645841247E-324 到 1.79769313486232E308。Double 的类型声明字符是数字符号 (#)
    String 数据类型($ 数据类型)
    String 的类型声明字符为美元号 ($)
    LZ:你所谓老版本VB是VB5,它应该支持上述定义.
      

  3.   

    低版本的VB用这种方式说明变量类型,VB 6.0兼容了低版本的这种说明变量类型的方式.
      

  4.   

    这2、隐式定义:使用类型说明符不符合MSDN的解释:
    LZ提问的写法也是显式定义变量.
    以下见MSDN:
    隐式声明
    在使用一个变量之前并不必先声明这个变量。 例如,可以书写这样一个函数,在其中就不必在使用变量 TempVal 之前先声明它:Function SafeSqr (num)
       TempVal = Abs (num)
       SafeSqr = Sqr (TempVal)
    End FunctionVisual Basic 用这个名字自动创建一个变量,使用这个变量时,可以认为它就是显式声明的。虽然这种方法很方便,但是如果把变量名拼错了的话,会导致一个难以查找的错误。例如,假定写了这样一个函数:Function SafeSqr (num)
       TempVal = Abs (num)
       SafeSqr = Sqr (TemVal)
    End Function乍看起来,这两段代码好象是一样的。但是因为在倒数第二行把 TempVal 变量名写错了,所以函数总是返回 0。当 Visual Basic 遇到新名字,它分辨不出这是意味着隐式声明了一个新变量呢,还是仅仅把一个现有变量名写错了,于是只好用这个名字再创建一个新变量。显式声明
    为了避免写错变量名引起的麻烦,可以规定,只要遇到一个未经明确声明就当成变量的名字,Visual Basic 都发出错误警告。要显式声明变量,请 在类模块、窗体模块或标准模块的声明段中加入这个语句: 
    Option Explicit
    —或—在“工具”菜单中选取“选项”,单击“编辑器”选项卡,再复选“要求变量声明”选项。这样就在任何新模块中自动插入 Option Explicit 语句,但不会在已经建立起来的模块中自动插入;所以在工程内部,只能用手工方法向现有模块添加 Option Explicit。
      

  5.   


    这个是正解,但我认为这个定义方法不直观,一般我不用,
    我一般用 as语句,比如,要定义一个长整形数据:
    Dim lngP As Long
      

  6.   

    那请教楼上各位,以下写法属于那类声明?
    Option Explicit
        Dim KeyDecimal%, KeyMinus%, KeyE%
        Dim SD$, SM$, myKeyDecimal%
        Dim X1!, X2!, Y1!, Y2!我认为如上写法属于显式声明变量.
    它等同于:
    Option Explicit
        Dim KeyDecimal As Integer
        Dim KeyMinus As Integer
        Dim KeyE As Integer
        Dim SD As String
        Dim SM As String
        Dim myKeyDecimal As Integer
        Dim X1 As Single
        Dim X2 As Single
        Dim Y1 As Single
        Dim Y2 As Single所谓隐式声明是在使用一个变量之前并不先声明这个变量。
      

  7.   

    低版本的写法,不直观,但是MSDN中一查就知道什么意思了,楼主不会是没有装MSDN吧.
      

  8.   

    公司用的Visual Studio 6.0是正版,当初就没有购买MSDN。