lookbook 发表于 2020-7-9 01:42:17

logical(c_bool)怎么用?

Fortran调用C

如何传递逻辑变量?


li913 发表于 2020-7-9 09:43:13

c没有逻辑型,用整型。

lookbook 发表于 2020-7-9 11:42:18

li913 发表于 2020-7-9 09:43
c没有逻辑型,用整型。

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

lookbook 发表于 2020-7-9 12:53:29

换个角度请教各位一句,关于.false.的编码,有多少厂商设的不是0?

li913 发表于 2020-7-9 16:49:26

lookbook 发表于 2020-7-9 12:53
换个角度请教各位一句,关于.false.的编码,有多少厂商设的不是0?

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

li913 发表于 2020-7-9 16:50:29

lookbook 发表于 2020-7-9 12:53
换个角度请教各位一句,关于.false.的编码,有多少厂商设的不是0?

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

vvt 发表于 2020-7-9 18:20:15

false 通常都是0,但 true 不一定是 1,可能是-1,或者其他非零值。

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

chiangtp 发表于 2020-7-9 23:42:05

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:17

FUNCTION f(a, b)                                                
IMPLICIT NONE                                                
LOGICAL, INTENT(IN   ) :: a                                 
LOGICAL, INTENT(OUT) :: b                                 
LOGICAL                :: f                                 
                                                               
INTERFACE ! 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                                                
页: [1]
查看完整版本: logical(c_bool)怎么用?