Vb中一个很基础的问题
vb吧
全部回复
仅看楼主
level 8
tbzp666 楼主
为什么 abs,sgn,int,fix不可以作为一个变量,而sqr,exp,log,sin可以作为一个变量存在呢?
它们同样都是内部函数名,为什么会有区别呢
2022年06月26日 02点06分 1
level 15
可以,这很玄学[滑稽]这似乎又是一个VB内部的神奇机制
我怀疑前面这些名称其实是VB的隐藏关键字,但是它们不显示成关键字的颜色,有一个相关的证据就是Me这个关键字,在VB6当中同样不是以关键字的颜色来显示的,貌似是个bug(到了VB.net,Me就是正常的关键字了)
另外我还想说一个:如果你使用sum这个名称作为变量名,并且不定义就使用,VB也会自动给你变成首字母大写的Sum,当然定义了就以你定义的大小写为准了
2022年06月26日 03点06分 2
对就是隐藏关键字的原因,因为VB6会对这些基础的数学函数做优化处理,比如Abs函数是Variant参数和Variant返回值,这样每次计算绝对值开销都很大,怎么办呢?VB6就提供了同名的隐藏关键字Abs,检测到你的变量并非Variant类型的时候,就给你直接翻译对应类型的CPU指令来完成(连函数调用开销没了)。
2022年06月26日 14点06分
整数取绝对值只需要4条指令,而浮点数取绝对值只需要1条指令,Variant至少得上万条指令。
2022年06月26日 14点06分
除了sum,还有avg、max、min、count也是[滑稽]
2022年06月26日 04点06分
having,where,from,group by等这些也是[滑稽]目测和sql语句关键词相关
2022年06月26日 04点06分
level 8
tbzp666 楼主
时隔半年再来看这个贴子,还是懵
2022年10月15日 08点10分 6
楼上那位和我不都跟你说了,Abs、Sgn、Int、Fix、Len、LenB这些是关键字、关键字、关键字(重要的事情说三遍)吗?这类不显示成蓝色的被称为隐藏关键字,只是它们的用法和函数很像而已,不代表它们就真的是函数。
2024年03月31日 15点03分
level 8
tbzp666 楼主
【AI回答】
在VB(Visual Basic)中,有些函数名是作为内部函数使用的,而有些则可以作为变量名。这是由于它们在语言中的用途和特性不同。
Abs, Sgn, Int, Fix: 这些函数主要用于执行数学或数值操作。它们执行特定的计算并返回结果。由于它们执行的操作是预定义的并且相对固定,因此它们通常不作为变量使用。这些函数通常用于计算表达式的值,而不是用于存储或引用数据。
Sqr, Exp, Log, Sin: 这些函数也可以执行数学计算,但与上述函数不同,它们在某些情况下可以作为变量使用。这主要是因为它们在某些情境下不仅仅代表数学函数,还可以作为自定义数据类型的名称或变量名。这取决于编程上下文和语言规则。
然而,尽管某些函数可以作为变量使用,这并不意味着它们的行为会改变。当用作变量时,它们仍然保持其数学定义和特性。
请注意,命名约定和可接受的使用方式可能会根据不同的编程语言和上下文而有所不同。在VB中,使用这些函数作为变量时需要遵循特定的命名规范和语言规则。
2023年12月25日 01点12分 9
其实这个没必要深究,就算可以作为或者不能作为,你也改变不了什么,微软也早就放弃了这个。变量可以用中文、数字、字母还有字符映射表的一些特殊字符,变量长度也可以定长得比较长,何必去用内部限定的,就算要用前面加个字母也就解决
2023年12月26日 02点12分
@隨風🍁缒夢 是AI回答
2023年12月26日 02点12分
变量可用的组合名一大把,何必去计较几个,想开些吧,我想就算很大的程序,变量名也足矣。而且函数、方法、事件内部(局部变量),变量名都可以重复利用
2023年12月26日 02点12分
@tbzp666 知道,我的意思没必要深究,省下的时间搞些程序不是很好,VB本身有很大缺限,没有指针、继承(vb只有implements实现)等等,和其他语言没法比,使用中尽量避其短处
2023年12月26日 02点12分
level 7
有些人讲一堆屁话,别人听不明白。说直接点就是:变量名不能和内部己经用过的字符串相同如 is,not,abs 等相同,想要用就在前面加个字母如 Nis,Nnot 或者 Sis,Snot
2023年12月25日 16点12分 10
那么请问,什么叫“内部已经用过的字符串”?为什么楼主提到的Abs、Int这些就是内部已经用过的字符串,而Sqr、Sin这些却不是呢?
2023年12月26日 13点12分
@初音✨七奈 对呀我也想问
2024年03月30日 09点03分
@郑兄弟333 看2楼
2024年03月30日 11点03分
level 1
推测。有没有可能在早期的vb程序中,由于性能不行的原因没有这些函数。所以被当作变量是可以的,但后来性能发展了之后呢,增加的这些函数。为了和早期程序兼容呢,就变成两用了。
2024年01月23日 17点01分 11
[大拇指]
2024年01月24日 02点01分
不是,abs这个函数编译后竟然不调用任何msvbvm60.dll中函数是意料之外,你的性能说也不存在,int、Fix支持Double型,cint不支持Double型
2024年01月24日 05点01分
只有关键字才是独立与作用域之外的特殊存在,因为被关键字占用的单词就不能用了定义为标识符了。只是Abs、Len、LenB这些关键字的用法和函数很像而已,但它们本质上跟函数完全是两回事。
2024年03月31日 15点03分
如果你把编译之后的exe再反汇编一下来看调用Abs和Sqr的代码就会知道,Abs会直接被编译成CPU的取绝对值指令,根本就没有call指令(禁用溢出检查的情况下)。而Sqr是正常的去call了msvbvm60.dll的rtcSqr函数。
2024年03月31日 15点03分
吧务
level 12
简单来讲,不必纠结为什么,写代码的时候主动避开使用这些内部函数的名称就可以了。
既然都用 VB6 了,就别纠结这么多了。
2024年03月30日 11点03分 12
人总有了解真像的权利
2024年03月31日 15点03分
1