block到底有什么作用,请大家来举例
我先说个示例:SUBROUTINE swap(i, j)INTEGER :: i, j
IF (i < j)
! The BLOCK statement has no BLOCK_construct_name. The corrsponding END BLOCK
! statement cannot have a BLOCK_construct_name either.
BLOCK
INTEGER :: temp
temp = i
i = j
j = temp
END BLOCK
END IF
END SUBROUTINE swap 和 C++ 的“代码块”类似。
代码块里定义的变量(如您的例子里的temp),作用域只在该代码块
(如果有同名的外部变量或全局变量,则在代码块内覆盖之,代码块结束后重新使之生效)
如下代码,输出为
33 5 7
5 7 5
33 7 5
program a
INTEGER :: i = 5, j = 7 ,temp = 33
write(*,*) temp,i,j
BLOCK
INTEGER :: temp
temp = i
i = j
j = temp
write(*,*) temp , i , j
END BLOCK
write(*,*) temp , i , j
end program a
如果涉及openmp并行计算的话,block语句算是填补Fortran的空白,因为c和c++都允许在代码中间插入变量申明,默认就是线程内的私有变量,无block语句的Fortran代码则需要额外申明变量属性 pasuka 发表于 2016-11-21 09:16
如果涉及openmp并行计算的话,block语句算是填补Fortran的空白,因为c和c++都允许在代码中间插入变量申明, ...
能举个例子吗
页:
[1]