避免在非默认类型的 Fortran 数组中出现转换警告

Avoiding conversion warning in Fortran array of non-default kind

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

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]

尝试

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

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

大概解决了你的问题。但是,假设 int8 不是默认种类(错误消息支持),该答案中给出的数组构造函数中的每个元素都应该具有相同的类型(它们有)和种类(它们没有)参数。所以:

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就没有了。