Fortran Coder

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

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

[复制链接]

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

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

楼主
发表于 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 点

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

沙发
发表于 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-5-17 22:51

Powered by Tencent X3.4

© 2013-2024 Tencent

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