Fortran Coder

查看: 8998|回复: 3
打印 上一主题 下一主题

[面向对象] block到底有什么作用,请大家来举例

[复制链接]

4

帖子

3

主题

0

精华

入门

F 币
31 元
贡献
18 点
跳转到指定楼层
楼主
发表于 2016-11-20 20:08:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我先说个示例:
[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
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2016-11-21 08:37:42 | 只看该作者
和 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

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

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

4

帖子

3

主题

0

精华

入门

F 币
31 元
贡献
18 点
地板
 楼主| 发表于 2016-11-21 13:21:55 | 只看该作者
pasuka 发表于 2016-11-21 09:16
如果涉及openmp并行计算的话,block语句算是填补Fortran的空白,因为c和c++都允许在代码中间插入变量申明, ...

能举个例子吗
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-26 17:43

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表