logical(c_bool)怎么用?
Fortran调用C如何传递逻辑变量?
c没有逻辑型,用整型。 li913 发表于 2020-7-9 09:43
c没有逻辑型,用整型。
_Bool算不算?确实可以用整形,但内心不爽 换个角度请教各位一句,关于.false.的编码,有多少厂商设的不是0? lookbook 发表于 2020-7-9 12:53
换个角度请教各位一句,关于.false.的编码,有多少厂商设的不是0?
false不是0的情况,没见过。 lookbook 发表于 2020-7-9 12:53
换个角度请教各位一句,关于.false.的编码,有多少厂商设的不是0?
false不是0的情况,没见过。 false 通常都是0,但 true 不一定是 1,可能是-1,或者其他非零值。
目前没有标准的方法来统一 bool(c) 和 Logical(fortran),建议用 int 或 short 代替。 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 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]