В следующем коде я пытаюсь проверить статус ассоциации указателя C (1), используя c_associated()
непосредственно для указателя C, или (2) используя associated()
для указателя Fortran полученный из c_f_pointer()
.
module test_m
use iso_c_binding
implicit none
contains
subroutine sub( cp )
type(c_ptr) :: cp
integer, pointer :: fp
print *, "cp ? ", c_associated( cp ) !! Line 1
call c_f_pointer( cp, fp )
print *, "fp ? ", associated( fp ) !! Line 2
end subroutine
end module
program main
use test_m
implicit none
type(c_ptr) :: cp
integer, target :: x
! cp = c_loc( x ) !! => T T
cp = c_null_ptr !! => F F
call sub( cp )
end
В приведенном выше случае результат всегда кажется одинаковым между строками 1 и 2. Но если cp
может быть нулевым указателем, следует ли мне использовать c_associated()
сначала проверить статус cp
, а затем использовать c_f_pointer()
только в том случае, если cp
гарантированно связан (т.е. не равен нулю)?