gfortran 错误:整数对于 (1) 处的同类而言太大了

use*_*964 2 fortran gfortran

我想查看 gfortran 的整数种类

所以我写了这一行

write(*,"(1X,I20,'correspond to kind  ',I2)"),11111111111,kind(11111111111)
Run Code Online (Sandbox Code Playgroud)

会有编译错误说

test.f90:67:57 类型的精度:错误:整数对于 (1) 处的同类来说太大了。可以使用选项 -fno-range-check 禁用该检查

所以我尝试用-fno-range-check. 但它给出了结果

-1773790777对应种类4

怎么了?另一方面,intel fortran 没有给出错误和正确答案

Vla*_*r F 5

无论您输入什么值1 ,没有任何种类指定的整数文字始终是默认种类。因此,即使询问也没有多大意义

kind(111111111111)

只要值有效,任何此类文字的类型始终是默认类型。所以与kind(1).

所有整数类型的值范围都是有限的。您可以使用的最大的一个

write(*,*) HUGE(1)
Run Code Online (Sandbox Code Playgroud)

在这里,1您可以使用您检查的整数类型的任何其他常量或变量。大多数情况下,HUGEwill的默认值2147483647对应于 32 位整数。

要使用更大的整数文字常量,请使用更大的非默认类型。

是否使用 Fortran 90 中的方法并不重要:

integer, parameter :: lk = selected_int_kind(15)

write(*,*) 11111111111_lk
Run Code Online (Sandbox Code Playgroud)

或来自 Fortran 2008

use iso_fortran_env

integer, parameter :: lk = int64

write(*,*) 11111111111_lk
Run Code Online (Sandbox Code Playgroud)

两者都会起作用。当然kind(11111111111_lk)会返回 的值lk


1那是标准的 Fortran。一些编译器可能会为您将大值提升为更大的类型,但仅作为非标准扩展。当转向保持标准行为的编译器时,您可能会感到不愉快。