SongAngel 发表于 2019-5-25 20:57:15

Fortran逻辑运算顺序

对于Fortran里面的逻辑与运算和逻辑或运算,在判断条件较多的情况下,如果根据排列考前的条件已经可以判断出整体的真或假,后面的条件还是会继续进行判断,这样会不会比较浪费时间。
不知道Fortran是否可以在已经可以做出判断的前提下,跳过后续条件的判断???

vvt 发表于 2019-5-25 21:07:23

本帖最后由 vvt 于 2019-5-25 21:10 编辑

这个语法没有规定,由各编译器实现去决定。
某些编译器,可能开了优化会跳过,不开不会。(不一定)

所以曾经有类似这样的代码
if( funcA() .or. funcB() ) then

但是 funcA 已经返回 true 了,而 funcB 里面有错误(比如数组越界)
一些编译器开了优化可以顺利执行(跳过了 funcB),而没有开优化,则会出错(数组越界)

SongAngel 发表于 2019-5-25 21:17:17

是的,今天就遇到了你描述的这个问题:-lol,再请教一下,我使用的是IVF编译器,他对这个有优化吗?

vvt 发表于 2019-5-25 21:43:22

你可以自己开优化
默认情况下 Debug 是无优化,Release是二级优化。

SongAngel 发表于 2019-5-25 22:23:12

好的,谢谢,我试下:-)!
页: [1]
查看完整版本: Fortran逻辑运算顺序