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

Mat*_*ric 5 debugging fortran if-statement segmentation-fault

假设我有以下代码

    IF (a.eq.0.or.M(a)) THEN
Run Code Online (Sandbox Code Playgroud)

使用整数和M(1:3)逻辑数组.如果a等于0,那么我希望第一个测试能够捕获它而第二个测试永远不会被评估.但是,如果我使用intel fortran编译器并编译

    -check all
Run Code Online (Sandbox Code Playgroud)

然后我遇到了分段错误.没有此调试选项,不会发生错误.这是标准行为吗?对于许多语言,在手册中明确说明了

    IF (A.or.B) THEN
Run Code Online (Sandbox Code Playgroud)

如果A为真,则不评估B. Fortran标准是否明确要求即使不影响最终结果也可以评估A和B?

Ken*_*nde 14

Fortran允许但不保证逻辑运算符的短路评估.因此,为了安全起见,您必须在假设每个操作数被评估的情况下编写代码.

  • +1,语言规范不保证短路.Compaq/DEC支持它,英特尔不支持,我也不能与其他编译器对话. (4认同)