Это важный класс ошибок программирования, когда компиляторы не слишком хороши, когда дело доходит до обнаружения экземпляров.Как отмечается в вопросе, компиляторы Intel и GNU не могут обнаружить проблему при компиляции с проверкой границ доступа к массиву.
Действительно, мне не известны другие флаги, которые включают такую проверку в компиляторе во время выполнения.время.
Однако в некоторых случаях и gfortran, и ifort могут уловить ошибку.Когда фактическое значение или аргумент имеют явный размер, заданный константным выражением, и интерфейс подпрограммы «известен» (не обязательно явный), может быть обнаружена ошибка.С gfortran процедура, находящаяся в том же файле, может включить эту проверку, а с помощью ifort опция -warn interfaces
(возможно, после -gen_interfaces
) делает то же самое.
Теперь, это важный класс ошибокмы можем выйти за пределы простых границ вопроса.Как говорится в ответе от PTRK , ошибку можно смягчить, если не использовать явные фиктивные фигуры.
Кроме того, компилятор NAG, например, предлагает такие проверки во время выполнения для фактическихаргументы не короче, чем связанные фиктивные аргументы.Скомпилированный с -C
код вопроса дает ошибку времени выполнения:
line 8: Invalid reference to procedure MAIN:F - Dummy array X (number 1) has 7 elements but actual argument only has 6 elements
Program terminated by fatal error
Всегда стоит рассмотреть различные инструменты для выявления различных аспектов потенциальных ошибок программирования или неразумных практик.