避免在非默认类型的 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就没有了。
我有以下命令来设置我的数组
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就没有了。