2015-07-01 3 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.

Для получения 0 доброго 8 использования 0_8:

call takeIntKind4And8(0_4,0_8) 

рекомендую держаться подальше от использования 4 и 8 непосредственно и использовать целые константы например 0_ip, где ip - целочисленная константа с правильным значением. См. Fortran: integer*4 vs integer(4) vs integer(kind=4) для получения дополнительной информации.

Смежные вопросы