回 帖 发 新 帖 刷新版面

主题:[讨论]关于VB里For...To..语句

以前,我想当然地认为
for i = 0 to ubound(tmpArr)    'tmpArr为数组
    '
next
其中的ubound()函数会调用m=ubound(tmpArr)次。于是,常常写成下面的这种形式(尤其是当循环次数是从数据库记录集里获得时,如rs("repeatTime") )
m=ubound(tmpArr)
for i = 0 to m
    '
next
今天用下面的代码试了一下
Option Explicit
Private Sub Command1_Click()
Dim i As Integer
For i = 0 To test()
Next
End Sub
Private Function test() As Integer
test = 5
Debug.Print "test() is called"
End Function
结果发现,test()只调用了一次。那么,我以前确实是想多了,做了无用功。

又在VC++里试了下。
#include "stdafx.h"
int test();
int main(int argc, char* argv[])
{
    printf("Hello World!\n");
    
    for (int i = 0 ;i <test();i++)
    {
        ;
    }
    return 0;
}
int test(void)
{
    printf("test() is called!\n");
    return 5;
    
}
结果test()被调用了多次!
搞不明白了。难道VB里的For 语句每次循环之后不用检查的么?还是它另外做了什么手脚?

回复列表 (共2个回复)

沙发

不是VB里的For 语句每次循环之后不用检查,而是VB把循环终值test()这个表达式计算出来后就另外保存了,以后循环时都会取这个保存的值来对照检查,不会每循环一次就计算一次。

板凳

应该是“VB另外做了手脚”...
唉,VB呀,你到底隐藏了多少东西?

另:求《高级visual basic编程》,Matthew Curland著,ISBN:7-5083-0662-7 。 在卓越网等地方都买不到了,缺货....

我来回复

您尚未登录,请登录后再回复。点此登录或注册