我是这样的习惯:Function BytesGetSumMap(ByRef pBytes() As Bytes) As Long() Dim tOutLongs() As Long '函数全局部分。这里是输出变量 ReDim tOutLongs(0 To 255) Dim tBytes_Start As Long '参数处理部分。 Dim tBytes_End As Long '参数处理部分。 tBytes_Start = LBound(pBytes()) tBytes_End = UBound(pBytes()) Dim tIndex As Long '循环预备部分。循环内部不能重复定义,所以要在循环开头定义循环内部的所有变量。 Dim tIndex_Start As Long Dim tIndex_End As Long tIndex_Start = tBytes_Start '虽然tIndex_Start=tBytes_Start,但tIndex_Start就是tIndex_Start,在正式的程序里保留这个写法,临时的草稿可以不这么麻烦。 tIndex_End = tBytes_End Dim tByte As Byte For tIndex = tIndex_Start To tIndex_End tByte = pBytes(tIndex) tOutLongs(tByte) = tOutLongs(tByte) + 1 Next BytesGetSumMap = tOutLongs() End Function
Dim tOutLongs() As Long '函数全局部分。这里是输出变量 ReDim tOutLongs(0 To 255) Dim tBytes_Start As Long '参数处理部分。
Dim tBytes_End As Long '参数处理部分。 tBytes_Start = LBound(pBytes())
tBytes_End = UBound(pBytes()) Dim tIndex As Long '循环预备部分。循环内部不能重复定义,所以要在循环开头定义循环内部的所有变量。
Dim tIndex_Start As Long
Dim tIndex_End As Long tIndex_Start = tBytes_Start '虽然tIndex_Start=tBytes_Start,但tIndex_Start就是tIndex_Start,在正式的程序里保留这个写法,临时的草稿可以不这么麻烦。
tIndex_End = tBytes_End Dim tByte As Byte For tIndex = tIndex_Start To tIndex_End
tByte = pBytes(tIndex)
tOutLongs(tByte) = tOutLongs(tByte) + 1
Next BytesGetSumMap = tOutLongs()
End Function
有时为了节省内存,我会反复思考怎样编写可以节省变量,这样可以提高效率,
变量都是放到函数开始处的,并有注释
不过也有提倡就近定义变量的
有时不好,比如在Select case中,容易犯重复定义的错误!
//用到的时候才定义~~~那倒不一定,因为所有局部变量所占用的(堆栈)内存都是在函数一开始时分配的(sub esp, ??h)
脚本语言(VBScript, JScript)的函数也是这样的,所有局部变量在函数一开始时分配。