Fortran Coder

标题: block到底有什么作用,请大家来举例 [打印本页]

作者: qingchong    时间: 2016-11-20 20:08
标题: block到底有什么作用,请大家来举例
我先说个示例:
[Fortran] 纯文本查看 复制代码
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

作者: fcode    时间: 2016-11-21 08:37
和 C++ 的“代码块”类似。

代码块里定义的变量(如您的例子里的temp),作用域只在该代码块
(如果有同名的外部变量或全局变量,则在代码块内覆盖之,代码块结束后重新使之生效)

如下代码,输出为
          33           5           7
           5           7           5
          33           7           5
[Fortran] 纯文本查看 复制代码
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


作者: pasuka    时间: 2016-11-21 09:16
如果涉及openmp并行计算的话,block语句算是填补Fortran的空白,因为c和c++都允许在代码中间插入变量申明,默认就是线程内的私有变量,无block语句的Fortran代码则需要额外申明变量属性
作者: qingchong    时间: 2016-11-21 13:21
pasuka 发表于 2016-11-21 09:16
如果涉及openmp并行计算的话,block语句算是填补Fortran的空白,因为c和c++都允许在代码中间插入变量申明, ...

能举个例子吗




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2