Fortran Coder

标题: logical(c_bool)怎么用? [打印本页]

作者: lookbook    时间: 2020-7-9 01:42
标题: logical(c_bool)怎么用?
Fortran调用C

如何传递逻辑变量?



作者: li913    时间: 2020-7-9 09:43
c没有逻辑型,用整型。
作者: lookbook    时间: 2020-7-9 11:42
li913 发表于 2020-7-9 09:43
c没有逻辑型,用整型。

_Bool算不算?确实可以用整形,但内心不爽
作者: lookbook    时间: 2020-7-9 12:53
换个角度请教各位一句,关于.false.的编码,有多少厂商设的不是0?
作者: li913    时间: 2020-7-9 16:49
lookbook 发表于 2020-7-9 12:53
换个角度请教各位一句,关于.false.的编码,有多少厂商设的不是0?

false不是0的情况,没见过。
作者: li913    时间: 2020-7-9 16:50
lookbook 发表于 2020-7-9 12:53
换个角度请教各位一句,关于.false.的编码,有多少厂商设的不是0?

false不是0的情况,没见过。
作者: vvt    时间: 2020-7-9 18:20
false 通常都是0,但 true 不一定是 1,可能是-1,或者其他非零值。

目前没有标准的方法来统一 bool(c) 和 Logical(fortran),建议用 int 或 short 代替。
作者: chiangtp    时间: 2020-7-9 23:42
[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                                                                          

作者: chiangtp    时间: 2020-7-10 22:04
[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                                                  





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