我有以下命令来设置我的数组
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]
答案 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]
但它只是一个警告,另一种停止编译器的方法是设置或取消设置标志。由于您对使用的编译器保持沉默,因此我不会猜测其文档中的内容或设置为什么值的标志。