bind(c)的结构体,其内部必须是可与C语言交互的,即必须使用ios_c_binding定义的那些类型。比如这里必须是integer(c_int),而不能是默认的integer,尽管它们可能实际上是一个东西。 完整的代码请看我包装的C语言时间库的代码:time-f,虽然可能没啥用,但是可以作为一个比较好的使用2003标准进行Fortran与C语言混编的例子。
extern "C" void ntmdtr(float *A, float *B, float *C, int *N) subroutine ntmdtr(A,B,C,N) bind(c,name='ntmdtr') use iso_c_binding, only: c_float, c_int implicit none integer(c_int),intent(in)::n real(c_float),intent(in)::a(n),b(n) real(c_float),intent(out)::c...
integer(c_int), intent(in):: array(n) end function integer(c_int) function func2(pt, n) bind(c, name="test") importimplicitnone integer(c_int), intent(in), value:: n type(c_ptr), value:: pt end function endinterfacetype(c_ptr) :: a1 integer(c_int), target:: abc(5) int...
3.4.8 –c 仅编译;生成目标 .o 文件,但禁止链接。 针对每个源文件编译 .o 文件。如果仅编译一个源文件,则可以使用 -o 选项来指定所写入的 .o 文件的名称。 3.4.9 –copyargs 允许为常量参数赋值。 允许子程序更改其为常量的哑元参数。提供此选项只是为了允许编译和执行传统代码而不出现运行时错误。 在...
Fortran 与 C 数组传递的三种方式 (gitee.com) (https://gitee.com/zoziha/fortran-array-to-c) C语言代码: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 // 获取两者最大值intmax(int*two_int){int result;if(two_int[0]>two_int[1])result=two_int[0];elseresult=two_int[1];// 检查...
integer(c_int),intent(in),value::n1 real(c_float),intent(in)::input(n1) integer(c_int),intent(out)::n2 integer::i,j call clear()if(input(1)<1.E0)then allocate(stu(10))elseallocate(stu(int(input(1))+1)) endifdoi=1,size(stu) ...
3.4.8–c 仅编译;生成目标.o文件,但禁止链接。 针对每个源文件编译.o文件。如果仅编译一个源文件,则可以使用-o选项来指定所写入的.o文件的名称。 3.4.9–cg89 (已过时,SPARC)针对通用 SPARC 体系结构进行编译。 此选项是以下选项的宏:-xarch=v7-xchip=old-xcache=64/32/1(与-xtarget=ss2等效)。
一、FORTRAN语言的三点说明1.常数与变量的说明2.语句书写格式3.与C语言的不同 1.常数与变量的说明 FORTRAN中常数与变量分为7类 整数型(integer)长整型32bit,短整型16bit; 实型(real)32bit;双精度实型(doubleprecision)real*8;8bytes64bits复型(complex)a+bi两个浮点...
SUBROUTINEADD(A,B,C)INTEGERA,B,CC=A+BRETURNEND 转换为C代码: 代码语言:javascript 复制 voidadd(int*a,int*b,int*c){*c=*a+*b;} 注意事项: 注意指针的使用,因为FORTRAN中的变量是通过引用传递的。 函数名称在C中通常是小写(这不是强制的,但是是一种常见的约定)。
type(c_ptr) function get_elem_name(i) bind(C, name="get_elem_name") #IFDEF DLL !DEC$ ATTRIBUTES DLLEXPORT :: get_elem_name #ENDIF use ELEMENTS, only: elemname, nbelem implicit none integer(c_int), INTENT(IN), value :: i character(len=21,kind=c_char) :: re...