Fortran类型转换

时间:2015-05-08 16:08:58

标签: arrays fortran converter

我有以下命令来设置我的数组

Use, Intrinsic :: iso_fortran_env
Integer (Int8), Allocatable :: iu(:)

Allocate (iu(4))
iu = [4,3,2,1]

如何阻止编译器给我

Allocate (iu(4));  iu = [4,3,2,1]
                       1
Warning: Possible change of value in conversion 
from INTEGER(4) to INTEGER(1) at (1) [-Wconversion]

2 个答案:

答案 0 :(得分:6)

High Performance Mark's answer关于解决您的问题。但是,假设int8不是默认类型(错误消息支持的那种),那个答案中给出的数组构造函数中的每个元素应该具有相同的类型(它们具有)和种类(它们没有' t)参数。所以:

iu = [4_int8,3_int8,2_int8,1_int8]

是一个有效的构造函数,不应该涉及转换。

这样做有点乏味,特别是对于许多元素,所以值得注意的是(如Fortran 2008 4.8中所述),可以在数组中使用类型规范构造函数,用于指定数组的类型和类型参数。然后,您可以写

iu = [integer(Int8) :: 4, 3, 2, 1]

现在所需的值只能与integer(Int8)一致。

gfortran是否抱怨转换似乎取决于编译器版本。使用旧版本进行测试时仍有警告,4.9.0没有警告。

答案 1 :(得分:2)

尝试

iu = [4_int8,3,2,1]

但它只是一个警告,另一种停止编译器的方法是设置或取消设置标志。由于您对使用的编译器保持沉默,因此我不会猜测其文档中的内容或设置为什么值的标志。