MST

星途 面试题库

面试题:Fortran与C语言混合编程中的数据类型转换问题

在Fortran与C语言混合编程时,Fortran的整型和C语言的整型在数据表示上可能存在差异。假设Fortran中有一个`INTEGER(4)`类型的变量,C语言中有一个`int`类型变量。请描述如何在两者之间进行安全的数据传递和转换,并且给出简单的代码示例(Fortran和C语言代码)。
49.1万 热度难度
编程语言Fortran

知识考点

AI 面试

面试题答案

一键面试

Fortran与C语言整型数据表示差异及转换

  1. 差异
    • Fortran的INTEGER(4)通常表示4字节(32位)的有符号整数。
    • 在C语言中,int的大小可能因编译器和系统而异,但在大多数32位和64位系统上,int也是4字节(32位)有符号整数。不过,为了确保可移植性,C语言可以使用<stdint.h>头文件中的固定宽度整数类型,如int32_t来明确表示32位有符号整数。
  2. 安全的数据传递和转换
    • 数据传递:在Fortran与C语言混合编程中,通常通过函数调用传递数据。确保函数声明中参数类型匹配。
    • 数据转换:由于两者在大多数情况下INTEGER(4)int(或int32_t)数据表示相同,一般无需特殊转换。但为了代码的健壮性和可移植性,在传递时要明确类型。
  3. 代码示例
    • Fortran代码
program fortran_c_mixed
    use iso_c_binding
    implicit none
    integer(c_int) :: f_int
    interface
        subroutine c_function(c_int_var) bind(C, name='c_function')
            import c_int
            integer(c_int), intent(in) :: c_int_var
        end subroutine c_function
    end interface
    f_int = 42
    call c_function(f_int)
end program fortran_c_mixed
  • C语言代码
#include <stdio.h>
#include <stdint.h>

void c_function(int32_t c_int_var) {
    printf("Received integer from Fortran: %d\n", c_int_var);
}

在上述代码中,Fortran通过iso_c_binding模块使用integer(c_int)类型来与C语言的int32_t(这里int32_t等同于int在常见系统上)匹配。通过bind(C)声明Fortran调用的C函数接口,实现了安全的数据传递。