注册 登录
编程论坛 VB6论坛

sub 和 function 究竟有什么不同?

txxb 发布于 2014-11-18 13:27, 468 次点击
都说sub没有返回值,function有返回值

sub也可以有返回值,二者没有区别。
4 回复
#2
zhengang10262014-11-18 14:56
Sub没有返回值的,你怎么说有?举个例说明。
#3
zhengang10262014-11-18 15:03
你不见函数是这样定义的:Function Add(ByVal A As Long, ByVal B As Long) as long,而过程是这样定义的:Sub Add(ByVal A As Long, ByVal B As Long)。
前者后面多了个“as long",而后者没有。这就是说前者定义了返回值的类型,而后者不返回值,所以没有类型。
当然如果不需要返回值,两者就没什么区别。总的来说函数比过程功能更强大。



[ 本帖最后由 zhengang1026 于 2014-11-18 15:08 编辑 ]
#4
wube2014-11-21 02:22
许久以前,有前辈告知两者之间的差异,除了基本上返回值的差异外,据说还有程序启动后,系统载入内存时动作不同,个人是抱持存疑的态度,
也许板上先进可以协助释疑。

据说Sub和Function的差异是在于,一个是执行到时才会被读到内存中运行,一个是程序启动时就先再入到内存中等待被运行,所以Function
使用越多越占内存空间,但是速度快,而使用Sub则占内存空间较少,但是运行速度较慢,所以编程时要视程序设计需求,适时的分别使用Sub和
Function,以达程序运行时的最大效益。事实上我不确定是否是这样,只是印象中有人说过。
#5
xzlxzlxzl2014-11-21 07:22
回复 4 楼 wube
sub和function没有本质上的区别,sub就是void function。
你所说的要调入内存中执行的是动态链接库,就是平常所说的dll,程序没用到时,一般不会到内存中,需要时就会调入,调入后不释放内存。你所说的要占用内存的是“宏”,其实在编程时,有很多代码有共性,但又存在差异,写代码的可以提取共性,命名为一个“宏”,这样编译器编译时就会每遇到一个宏重复编译代码,执行sub和function时一定是执行机器代码call XXXXXXXXXX指令,会进行push 当前地址的入栈操作,sub和function执行完后一定会执行机器代码ret n的指令,会进行pop当前地址的操作,因此使用宏的话可以减少程序员的代码量,但宏不会进行入栈出栈操作,运行速度相对快些。
1