硬编码参数的类型

时间:2015-07-01 13:10:04

标签: fortran

当我尝试使用gfortran 4.4.7编译我的代码时,我收到以下错误消息:

  

错误:参数'intkind8'中的类型不匹配(1);通过INTEGER(4)   到INTEGER(8)。

使用ifort进行编译,除非我要求F2003标准,在这种情况下会给出类似的错误。

我的代码:

program kindDummy
    implicit none

    call takeIntKind4And8(0,0)

    contains
        subroutine takeIntKind4And8(intKind4, intKind8)
            implicit none
            integer(kind=4), intent(in) :: intKind4
            integer(kind=8), intent(in) :: intKind8

            print *, 'Integer(kind4): ', intKind4
            print *, 'Integer(kind8): ', intKind8

        end subroutine takeIntKind4And8

end program kindDummy

我想知道是否有一种优雅的方法可以让编译器将第一个0“转”为kind=4整数,将第二个转换为kind=8

1 个答案:

答案 0 :(得分:3)

#{
    val testMap1true = testMap1.forall(_._2)
    val testMap2true = testMap2.forall(_._2)        
}#

#if(testMap1true && testMap2true)
    <h1>All true</h1>
#elseif(testMap1true || testMap2true))
    <h1>One map true</h1>
#else
    <h1>Neither</h1>
#end

两个零都有默认类型。种类数字不可移植,但您的默认数字可能是4。

要生成0种,请使用call takeIntKind4And8(0,0)

0_8

我建议不要直接使用4和8并使用call takeIntKind4And8(0_4,0_8) 之类的整数常量,其中0_ip是一个具有正确值的整数常量。有关详情,请参阅Fortran: integer*4 vs integer(4) vs integer(kind=4)