面试题答案
一键面试Fortran与C语言整型数据表示差异及转换
- 差异:
- Fortran的
INTEGER(4)
通常表示4字节(32位)的有符号整数。 - 在C语言中,
int
的大小可能因编译器和系统而异,但在大多数32位和64位系统上,int
也是4字节(32位)有符号整数。不过,为了确保可移植性,C语言可以使用<stdint.h>
头文件中的固定宽度整数类型,如int32_t
来明确表示32位有符号整数。
- Fortran的
- 安全的数据传递和转换:
- 数据传递:在Fortran与C语言混合编程中,通常通过函数调用传递数据。确保函数声明中参数类型匹配。
- 数据转换:由于两者在大多数情况下
INTEGER(4)
和int
(或int32_t
)数据表示相同,一般无需特殊转换。但为了代码的健壮性和可移植性,在传递时要明确类型。
- 代码示例:
- 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函数接口,实现了安全的数据传递。