⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c_f_pointer_complex.f03

📁 用于进行gcc测试
💻 F03
字号:
! { dg-do run }! { dg-additional-sources c_f_pointer_complex_driver.c }! { dg-options "-std=gnu -w" }! Test c_f_pointer for the different types of interoperable complex values.module c_f_pointer_complex  use, intrinsic :: iso_c_binding, only: c_float_complex, c_double_complex, &       c_long_double_complex, c_f_pointer, c_ptr, c_long_double, c_int  implicit nonecontains  subroutine test_complex_scalars(my_c_float_complex, my_c_double_complex, &       my_c_long_double_complex) bind(c)    type(c_ptr), value :: my_c_float_complex    type(c_ptr), value :: my_c_double_complex    type(c_ptr), value :: my_c_long_double_complex    complex(c_float_complex), pointer :: my_f03_float_complex    complex(c_double_complex), pointer :: my_f03_double_complex    complex(c_long_double_complex), pointer :: my_f03_long_double_complex        call c_f_pointer(my_c_float_complex, my_f03_float_complex)    call c_f_pointer(my_c_double_complex, my_f03_double_complex)    call c_f_pointer(my_c_long_double_complex, my_f03_long_double_complex)    if(my_f03_float_complex /= (1.0, 0.0)) call abort ()    if(my_f03_double_complex /= (2.0d0, 0.0d0)) call abort ()    if(my_f03_long_double_complex /= (3.0_c_long_double, &         0.0_c_long_double)) call abort ()  end subroutine test_complex_scalars  subroutine test_complex_arrays(float_complex_array, double_complex_array, &       long_double_complex_array, num_elems) bind(c)    type(c_ptr), value :: float_complex_array    type(c_ptr), value :: double_complex_array    type(c_ptr), value :: long_double_complex_array        complex(c_float_complex), pointer, dimension(:) :: f03_float_complex_array    complex(c_double_complex), pointer, dimension(:) :: &         f03_double_complex_array    complex(c_long_double_complex), pointer, dimension(:) :: &         f03_long_double_complex_array    integer(c_int), value :: num_elems    integer :: i    call c_f_pointer(float_complex_array, f03_float_complex_array, &         (/ num_elems /))    call c_f_pointer(double_complex_array, f03_double_complex_array, &         (/ num_elems /))    call c_f_pointer(long_double_complex_array, &         f03_long_double_complex_array, (/ num_elems /))    do i = 1, num_elems       if(f03_float_complex_array(i) &            /= (i*(1.0, 0.0))) call abort ()       if(f03_double_complex_array(i) &            /= (i*(1.0d0, 0.0d0))) call abort ()       if(f03_long_double_complex_array(i) &            /= (i*(1.0_c_long_double, 0.0_c_long_double))) call abort ()    end do  end subroutine test_complex_arraysend module c_f_pointer_complex! { dg-final { cleanup-modules "c_f_pointer_complex" } }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -