Предупреждение о явном изменении формы массива - PullRequest
5 голосов
/ 29 мая 2019

Пусть все процедуры находятся внутри модулей.

  1. Если я передам массив real*8 aa(5,3) в подпрограмму

    subroutine sub(bb)
    real*8, intent(in) :: bb(2,5)
    ...
    end subroutine
    

    с оператором call sub(aa) будет скомпилирован без предупреждения, и первые 2 столбца из aa заполнят массив bb. Элементы массивов aa и bb расположены совершенно по-разному.

  2. Если вместо этого написана процедура

    subroutine sub(bb)
    real*8, intent(in) :: bb(:,:)
    ...
    end subroutine
    

    тогда bb будет иметь ту же форму и порядок хранения, что и aa.

Q: Первое поведение весьма опасно, если забыть, что в подпрограмме есть объявления явного размера. Можно ли заставить компилятор предупреждать, когда массивы с явной формой изменяют форму / выравнивание?

1 Ответ

1 голос
/ 29 мая 2019

Мне не известна опция компилятора, чтобы предупредить об этом, поскольку это вполне законная практика с использованием ассоциации хранения - у нас есть несколько вопросов и ответов об этой концепции. Это может быть весьма полезно.

...