主题:[讨论]关于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 语句每次循环之后不用检查的么?还是它另外做了什么手脚?
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 语句每次循环之后不用检查的么?还是它另外做了什么手脚?