Использование подпрограммы внутри модуля в Fortran 90 - PullRequest
2 голосов
/ 27 октября 2019

У меня есть вопрос об использовании подпрограммы внутри модуля в Fortran 90. Вот мой код

    Module Multiplication
      Subroutine Two_times(input,output)
        Real :: input,output  
        output = input * 2.0  
      End Subroutine Two_times
    End Module    
    Program test_get_command_argument
      Use Multiplication: Two_times

      Real :: i,j

      i = 0.5
      Write (*,*) i

      Call  Two_times(i,j)
      Write (*,*) j

    End Program

Я использовал ifort для компиляции приведенного выше кода. Я получил следующее сообщение.


    files_rev.f90(2): error #6218: This statement is positioned incorrectly and/or has syntax errors.
      Subroutine Two_times(input,output)
    --^
    files_rev.f90(4): error #6274: This statement must not appear in the specification part of a module.
        output = input * 2.0  
    ----^
    files_rev.f90(5): error #6786: This is an invalid statement; an END [MODULE] statement is required.
      End Subroutine Two_times
    --^
    files_rev.f90(5): error #6785: This name does not match the unit name.   [TWO_TIMES]
      End Subroutine Two_times
    -----------------^
    files_rev.f90(6): error #6790: This is an invalid statement; an END [PROGRAM]  statement is required.
    End Module 
    ^
    files_rev.f90(9): error #5082: Syntax error, found IDENTIFIER 'MULTIPLICATION' when expecting one of: ( : % [ . = =>
      Use Multiplication: Two_times
    ------^
    files_rev.f90(8): warning #5427: Program may contain only one main entry routine
    Program test_get_command_argument
    --------^
    compilation aborted for files_rev.f90 (code 1)

Почему я получил сообщения об ошибках # 6218 и # 6274 и как их исправить?

1 Ответ

1 голос
/ 27 октября 2019

Вам не хватает ключевого слова contains до объявления subroutine и ключевого слова only после use. Или вы можете сбросить : Two_times, чтобы использовать все в вашем модуле. Таким образом, рабочий код будет выглядеть следующим образом:

Module Multiplication
  Contains
  Subroutine Two_times(input,output)
    Real :: input,output  
    output = input * 2.0  
  End Subroutine Two_times
End Module 

Program test_get_command_argument
  Use Multiplication, Only: Two_times
  Real :: i,j

  i = 0.5
  Write (*,*) i

  Call Two_times(i,j)
  Write (*,*) j

End Program

Посмотрите на этот ответ, Невозможно скомпилировать модуль и основную программу в одном файле , а также для отсутствующегоcontains.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...