Zeu*_*eus 0 arrays fortran converter
我有以下命令来设置我的数组
Use, Intrinsic :: iso_fortran_env
Integer (Int8), Allocatable :: iu(:)
Allocate (iu(4))
iu = [4,3,2,1]
Run Code Online (Sandbox Code Playgroud)
我怎么能阻止编译器给我
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]
Run Code Online (Sandbox Code Playgroud)
高性能Mark的答案解决了您的问题.但是,假设int8不是默认类型(错误消息支持的那种),那个答案中给出的数组构造函数中的每个元素应该具有相同的类型(它们有)和种类(它们没有)参数.所以:
iu = [4_int8,3_int8,2_int8,1_int8]
Run Code Online (Sandbox Code Playgroud)
是一个有效的构造函数,不应该涉及转换.
这样做有点单调乏味,特别是对于许多元素,所以值得注意的是(如Fortran 2008 4.8中所述),可以在数组构造函数中使用类型规范来指定数组的类型和类型参数.然后,你可以写
iu = [integer(Int8) :: 4, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud)
现在值只需要符合的地方integer(Int8).
gfortran是否抱怨转换似乎取决于编译器版本.使用旧版本进行测试仍有警告,4.9.0则没有.