Общий комментарий: Использование implicit none
облегчает отладку! Просто Неявное нет и продолжайте!
Из-за неявного определения, которое вы определяете, это правильно, вы смешиваете операторы объявления типа с операторы параметров . Я упоминаю об этом, потому что вы используете токен ::
в своем параметре.
оператор объявления типа:
R801 declaration-type-spec [ [ , attr-spec ] ... :: ] entity-decl-list
источник: стандарт F2018 раздел 8.2
Вы можете объявить свой тип с возможными атрибутами, такими как PARAMETER
и токен ::
, который является необязательным, только когда атрибуты не определены.
PARAMETER
-статум:
Оператор PARAMETER
указывает PARAMETER
атрибут (8.5.13) и значения для именованных констант в списке.
R851 параметр-stmt равен PARAMETER ( named-constant-def-list )
R852 named-constant-def равен named-constant = constant-expr
источник: стандартная секция F2018 8.6.11
Таким образом, вы сразу замечаете, что токен ::
является необязательным только в операторе объявления типа , а не в утверждении параметра .
Теперь существует два возможных опции для написания модуля:
через объявление типа:
module kinds
use iso_fortran_env, only : real64, int32
implicit integer (w, i)
integer, parameter :: wp = real64, iwp = int32
end module kinds
но тогда зачем вам использовать здесь неявное объявление, вы все равно должны заявить, что оно integer
. Так что implicit none
будет просто замечательно, или просто неявное утверждение и просто ничего не напишет.
через PARAMETER
-статум:
module kinds
use iso_fortran_env, only : real64, int32
implicit integer (w, i)
parameter (wp = real64, iwp = int32)
end module kinds