如果测试,由fortran创建的分段错误

时间:2012-03-07 21:36:37

标签: debugging if-statement segmentation-fault fortran

假设我有以下代码

    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?

1 个答案:

答案 0 :(得分:13)

Fortran allows for, but does not guarantee, short-circuit evaluation of logical operators。因此,为了安全起见,您必须在假设每个操作数都被评估的情况下编写代码。