在Fortran代码中经常会看到这样的整数定义
integer(kind=c_int32_T) :: a
or
integer(kind=c_int_T) :: a
其实这是为了使代码具有可移植性,好处有两点:
1.在和c之间互传数据时候是安全的
2.在代码移植的时候不会因为操作系统不同而使得相同数据所占位置大小不同
因为fortran中不同类型数据所占的空间大小随着编译器不同而不同,而c语言的数据类型占空间大小是和系统位数相关(32位或者64位)。而如果使用了c_int32_T
那么这个变量的所占空间就会时4字节。
integer(kind=c_int8_T) :: a !单字节
integer(kind=c_int16_T) :: a !两字节
integer(kind=c_int32_T) :: a !四字节
integer(kind=c_int64_T) :: a !八字节