ошибка сегментации, созданная Fortran, если тесты - PullRequest
5 голосов
/ 08 марта 2012

Предположим, у меня есть следующий код

    IF (a.eq.0.or.M(a)) THEN

с целым числом и M (1: 3) массивом логических элементов.Если a равно 0, то я ожидаю, что первый тест его поймает, а второй никогда не будет оценен.Однако, если я использую компилятор intel fortran и компилирую с

    -check all

, я получаю ошибку сегментации.Без этой опции отладки ошибка не возникает.Это стандартное поведение?Для многих языков в руководстве прямо сказано, что для

    IF (A.or.B) THEN

, если A истинно, то B не оценивается.Требует ли стандарт Фортрана, чтобы A и B явно оценивались, даже если это не влияет на конечный результат?

1 Ответ

14 голосов
/ 08 марта 2012

Фортран допускает, , но не гарантирует , оценку логических операторов при коротком замыкании .Поэтому, чтобы быть в безопасности, вы должны будете написать свой код в предположении, что каждый операнд вычислен.

...