我一直在使用下划线将一个整数定义为fortran中的特定类型。
以下是一段代码,用于演示1_8
的含义,例如:
program main
implicit none
integer(2) :: tiny
integer(4) :: short
integer(8) :: long
tiny = 1
short = 1
long = 1
print*, huge(tiny)
print*, huge(1_2)
print*, huge(short)
print*, huge(1_4)
print*, huge(long)
print*, huge(1_8)
end program main
返回(使用PGI或gfortran):
32767
32767
2147483647
2147483647
9223372036854775807
9223372036854775807
我使用huge
内在函数返回给定种类的最大数量。所以1_8
显然与整数(8)相同。这也适用于实数,虽然我还没有在这里显示它。
但是,我一直无法找到有关此功能的任何文档,我也不记得我在哪里学习它。我的问题是:
使用_KIND
标准fortran?有没有人有这个来源?
编辑:已经指出我使用的类型值(2,4,8)不可移植 - 不同的编译器/机器可能会给出不同的值巨大的(1_4),例如。
答案 0 :(得分:6)
它是Fortran 90的标准Fortran,尽管每种类型的有效种类值和种类值的含义都取决于处理器。
Fortran标准是什么是“标准”Fortran的权威来源。 ISO / IEC 1539-1:2010是您可以购买的当前版本,或者可以从各个地方获得该文档的出版前草稿。 https://gcc.gnu.org/wiki/GFortranStandards有一系列有用的链接。
我希望许多编译器手册(例如 - 参见当前PGI Fortran reference manual的第2.2节)和现代Fortran上所有合理的教科书也会描述这个功能。
答案 1 :(得分:4)
正如已经回答的那样,这种表示法是标准的fortran,但是对于种类使用这些特定的数值是不可移植的。以前的答案描述了使用其他方案的编译器。还有其他几种可移植的方法。
首先,使用种类方案来定义符号,然后将这些符号用于数字常量:
integer, parameter :: RegInt_K = selected_int_kind (8)
write (*, *) huge (1_RegInt_K)
或使用ISO_FORTRAN_ENV模块中提供的种类定义,例如,
write (*, *) huge (1_int32)
此模块的种类以用于存储的位数指定。其中一些类型仅适用于Fortran 2008.如果编译器中缺少这些类型,则可以使用ISO_C_BINDING提供的类型定义,该定义较旧。
答案 2 :(得分:2)
要添加到IanH's answer,Fortran 2008中的整数文字常量的规范在4.4.2.2中给出。像1_8
这样的东西适合R407和R408(对于明显的数字字符串):
int-literal-constant digit-string [_ kind-param ]
kind-param digit-string 或 标量-int-常量名称
您可以找到与其他数据类型类似的内容(但请注意,对于字符,kind参数位于文字常量的前面)。