是否可以使用Fortran的Select Type识别和区分类型?

时间:2014-12-14 17:27:23

标签: select fortran

可以Select Type区分Integer(Int8)Integer(Int16)Integer(Int32)Integer(Int64)吗?

此外,Select Type可以识别整数类型,而不管它使用的位数是多少?

2 个答案:

答案 0 :(得分:1)

不同的整数种类构成不同的内在类型。所以是的,select type区分不同类型的整数。

我不知道有任何可能忽视这种类型(即理论上不仅仅是字节数)。您必须为每种类型使用不同的type is部分。

答案 1 :(得分:1)

是的,你可以写下面的内容。在这里,我使用内在模块iso_fortran_env中的实际常量。

SELECT TYPE(areal)
TYPE is (REAL(real32))
   WRITE(*,*) '... real32'
TYPE is (REAL(real64))
   WRITE(*,*) '... real64'
CLASS default
   WRITE(*,*) '... default'
END SELECT

但请注意,您无法写

SELECT TYPE(areal)
TYPE is (REAL(real32))
   WRITE(*,*) '... real32'
TYPE is (REAL(real64))
   WRITE(*,*) '... real64'
TYPE is (REAL)
    WRITE(*,*) '... real'
CLASS default
   WRITE(*,*) '... default'
END SELECT

在这种情况下,真实的默认类型(对于大多数当前编译器可能是real32)将匹配两个类型保护语句,并且这是编译器应该选择的错误。