2015-07-01 65 views
0

當我嘗試編譯使用gfortran 4.4.7我的代碼,我得到了以下錯誤消息:類型的硬編碼參數的

Error: Type mismatch in argument 'intkind8' at (1); passed INTEGER(4) to 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

回答

2

call takeIntKind4And8(0,0) 

兩個零有默認的那種。那種數字是不可移植的,但您的默認一個可能是4

要生產8種使用0_8 0:

call takeIntKind4And8(0_4,0_8) 

我建議使用4和8個直接遠離並使用整型常量像0_ip其中ip是一個具有正確值的整數常量。有關更多信息,請參見Fortran: integer*4 vs integer(4) vs integer(kind=4)