假设我有以下代码
IF (a.eq.0.or.M(a)) THEN
使用整数和M(1:3)逻辑数组。 如果a等于0,那么我希望第一个测试能够捕获它而第二个测试永远不会被评估。但是,如果我使用intel fortran编译器并使用
编译 -check all
然后我遇到了分段错误。没有此调试选项,不会发生错误。 这是标准行为吗?对于许多语言,在手册中明确说明了
IF (A.or.B) THEN
如果A为真,则不评估B. Fortran标准是否明确要求即使不影响最终结果也可以评估A和B?
答案 0 :(得分:13)
Fortran allows for, but does not guarantee, short-circuit evaluation of logical operators。因此,为了安全起见,您必须在假设每个操作数都被评估的情况下编写代码。