Fortran Coder

查看: 10344|回复: 8
打印 上一主题 下一主题

[混编] logical(c_bool)怎么用?

[复制链接]

79

帖子

17

主题

0

精华

专家

齊天大聖

F 币
433 元
贡献
266 点
跳转到指定楼层
楼主
发表于 2020-7-9 01:42:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Fortran调用C

如何传递逻辑变量?


分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
沙发
发表于 2020-7-9 09:43:13 | 只看该作者
c没有逻辑型,用整型。

79

帖子

17

主题

0

精华

专家

齊天大聖

F 币
433 元
贡献
266 点
板凳
 楼主| 发表于 2020-7-9 11:42:18 | 只看该作者
li913 发表于 2020-7-9 09:43
c没有逻辑型,用整型。

_Bool算不算?确实可以用整形,但内心不爽

79

帖子

17

主题

0

精华

专家

齊天大聖

F 币
433 元
贡献
266 点
地板
 楼主| 发表于 2020-7-9 12:53:29 | 只看该作者
换个角度请教各位一句,关于.false.的编码,有多少厂商设的不是0?

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
5#
发表于 2020-7-9 16:49:26 | 只看该作者
lookbook 发表于 2020-7-9 12:53
换个角度请教各位一句,关于.false.的编码,有多少厂商设的不是0?

false不是0的情况,没见过。

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
6#
发表于 2020-7-9 16:50:29 | 只看该作者
lookbook 发表于 2020-7-9 12:53
换个角度请教各位一句,关于.false.的编码,有多少厂商设的不是0?

false不是0的情况,没见过。

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
7#
发表于 2020-7-9 18:20:15 | 只看该作者
false 通常都是0,但 true 不一定是 1,可能是-1,或者其他非零值。

目前没有标准的方法来统一 bool(c) 和 Logical(fortran),建议用 int 或 short 代替。

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

8#
发表于 2020-7-9 23:42:05 | 只看该作者
[Fortran] 纯文本查看 复制代码
PROGRAM test                                                                              
  USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_BOOL                                           
                                                                                          
  LOGICAL*1  :: byte_1_logical  ! kind of 1-byte                                          
  LOGICAL(1) :: kind_1_logical  ! kind number is 1                                        
  LOGICAL    :: default_logical ! default kind                                            
                                                                                          
  WRITE(*,*) C_BOOL !---> 1-byte                                                          
                                                                                          
  ! report the kind nunmbes                                                               
  WRITE(*,*) KIND(byte_1_logical)                                                         
  WRITE(*,*) KIND(kind_1_logical)                                                         
  WRITE(*,*) KIND(default_logical)                                                        
                                                                                          
  ! Many compilers support 1-, 2- 4- 8-byte LOGICALs                                      
  ! kind numbers may be (1,2,3,4) or (1,2,4,8), compiler-time-switch dependent            
                                                                                          
END PROGRAM test                                                                          

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

9#
发表于 2020-7-10 22:04:17 | 只看该作者
[Fortran] 纯文本查看 复制代码
FUNCTION f(a, b)                                                
  IMPLICIT NONE                                                 
  LOGICAL, INTENT(IN   ) :: a                                   
  LOGICAL, INTENT(  OUT) :: b                                   
  LOGICAL                :: f                                   
                                                                
  INTERFACE ! [C] bool c(bool a, bool *b)                       
    FUNCTION c(a, b) BIND(C,NAME='c')                           
      USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_BOOL             
      IMPLICIT NONE                                             
      LOGICAL(C_BOOL), VALUE :: a                               
      LOGICAL(C_BOOL)        :: b                               
    END FUNCTION c                                              
  END INTERFACE                                                 
                                                                
  LOGICAL(C_BOOL) :: bb                                         
                                                                
  !---------------                                              
                                                                
  f = c(LOGICAL(a,KIND=C_BOOL), bb)                             
                                                                
  b = bb                                                        
                                                                
  ! there should be no problem: assign "1-byte" to "4-byte"     
                                                                
END FUNCTION f                                                  
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-11-23 06:25

Powered by Tencent X3.4

© 2013-2024 Tencent

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