Какое средство защиты от этого предупреждения gcc Fortran компиляции?Путаница с субмодулями Фортран и флагом соответствия gcc -Wuse-only-only
USE statement at (1) has no ONLY qualifier
Предупреждение возникает при использовании подмодулей в gcc 6.0, 6.1, 6.2 и, 7.0.
Полная последовательность компиляции и предупреждения:
$ gfortran -c -Wuse-without-only -o mod_module.o mod_module.f08
$ gfortran -c -Wuse-without-only -o mod_module_sub.o mod_module_sub.f08
mod_module_sub.f08:1:19:
submodule (mModule) mSubModule
1
Warning: USE statement at (1) has no ONLY qualifier [-Wuse-without-only]
$ gfortran -c -Wuse-without-only -o demonstration.o demonstration.f08
$ gfortran -o demonstration demonstration.o mod_module.o mod_module_sub.o
$ ./demonstration
this + that = 3.00000000
expected value is 3
Основная программа (demonstration.f08):
program demonstration
use mModule, only : myType
implicit none
type (myType) :: example
example % this = 1.0
example % that = 2.0
call example % adder ()
write (*, *) 'this + that = ', example % other
write (*, *) 'expected value is 3'
stop
end program demonstration
модуль (mod_module.f08):
module mModule
implicit none
type :: myType
real :: this, that, other
contains
private
procedure, public :: adder => adder_sub
end type myType
private :: adder_sub
interface
module subroutine adder_sub (me)
class (myType), target :: me
end subroutine adder_sub
end interface
end module mModule
Submodule (mod_module_sub .f08):
submodule (mModule) mSubModule ! <=== problematic statement
implicit none
contains
module subroutine adder_sub (me)
class (myType), target :: me
me % other = me % this + me % that
end subroutine adder_sub
end submodule mSubModule
То есть, как правильно определить подмодули? Флаг -Wuse-without-only
необходим для составления более длинных кодов.
Ни один из моих кодов не передаст эту опцию без предупреждения. –