2017-01-25 9 views
1

Какое средство защиты от этого предупреждения 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 необходим для составления более длинных кодов.

ответ

2

В зависимости от вашей перспективы это просто ошибка компилятора. Распечатайте отчет об ошибке и дождитесь его исправления (или исправьте его самостоятельно).

(Альтернативная перспектива в том, что, поскольку этот код дает подмодулям доступ ко всем лицам своего хозяина, будьте то требуется или нет, предупреждение уместно. Но ограничение узла связи требует поддержки F2015.)

-Wuse-without-only просто предупреждение, чтобы помочь обеспечить соблюдение определенного стиля программирования (тот, который, как мне кажется, не очень полезен). Не может быть «существенным» компилировать любой код, короткий или длинный. Если предупреждение беспокоит вас тем временем, удалите эту опцию.

+0

Ни один из моих кодов не передаст эту опцию без предупреждения. –