ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4736|回复: 4

VB6不支持逻辑运算中的条件短路的

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-7-30 11:59 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:数据类型和基本语句
本帖最后由 liucqa 于 2013-7-30 12:05 编辑

VB6是不支持条件短路的,VB6的编译器不提供此运算功能。当在做逻辑运算时,如:And,Or运算时,无论And的前半部分条件是真还是假,照旧需要运算后半部分的结果,而后将两个结果再进行一次比较运算。

**************************************************************************************************************************

不过在VB.Net中可以支持条件短路运算,但需要使用VB.Net提供的新的运算符AndAlso和OrElse,VB.Net中的AndAlso相当于C风格语言的&&运算,同理VB.Net的OrElse相当于C风格语言的||运算。     

C#中的两组逻辑运算符&&和||支持短路运算

逻辑运算的短路原则是C语言标准明确规定了的,必须按照自左至右的原则


ANSI C 规定了逻辑操作符都是短路求值的。对逻辑与,标准时这么说的,注意粗体部分内容:
6.5.13 Logical AND operator
Syntax
1 logical-AND-expression:
inclusive-OR-expression
logical-AND-expression && inclusive-OR-expression
Constraints
2 Each of the operands shall have scalar type.
Semantics
3 The && operator shall yield 1 if both of its operands compare unequal to 0; otherwise, it
yields 0. The result has type int.
4 Unlike the bitwise binary & operator, the && operator guarantees left-to-right evaluation;
there is a sequence point after the evaluation of the first operand. If the first operand
compares equal to 0, the second operand is not evaluated.


要小心千万不要重载 || 、&&运算符,因为一旦重载,则编译器就无法保证短路了。事实上重载这些运算符是一种相当糟糕应该被杜绝的做法。        

短路规则:逻辑与和逻辑或运算都是按照左边进行短路运算
所以大家可以放心使用
if(NULL=pMsg||NULL==pMsg->pData)这样的逻辑判断

TA的精华主题

TA的得分主题

发表于 2013-11-29 12:21 | 显示全部楼层
今天遇到个 -1>=0 and arr(-1)的越界错误,才发现和C是 不同的,用ON ERROR RESUME NEXT 进入死循环了,只好全部加一,大侠有啥高招

TA的精华主题

TA的得分主题

发表于 2013-11-29 12:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
今天遇到个 -1>=0 and arr(-1)的越界错误,才发现和C是 不同的,用ON ERROR RESUME NEXT 进入死循环了,只好全部加一,大侠有啥高招

TA的精华主题

TA的得分主题

发表于 2014-3-10 11:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 lolmuta 于 2014-3-10 11:59 编辑
  1. Sub main()

  2.     If a1 or a2 Then
  3.    
  4.         Debug.Print "ok"
  5.    
  6.     End If


  7. End Sub
  8. Function a1() As Boolean
  9.     Debug.Print "a1"
  10.     a1 = True
  11. End Function
  12. Function a2() As Boolean
  13.     Debug.Print "a2"
  14.     a2 = True
  15. End Function
复制代码
執行main()

我想
a1
ok

but vba print
a1
a2
ok

TA的精华主题

TA的得分主题

发表于 2014-11-12 12:03 | 显示全部楼层
3楼的问题只能把两个条件拆开了,我只知道这个笨方法
if -1>=0 then
    if arr(-1) ...
    end if
end if

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 09:30 , Processed in 0.041079 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表