Как заставить gfortran выполнять ЦЕЛОЧИСЛЕННО-ЛОГИЧЕСКОЕ преобразование

#gfortran

#gfortran

Вопрос:

Согласно этому, gfortran может выполнять целочисленно-логическое преобразование, но я получаю эту ошибку:

                   if (.not.bDropped.and.(zz_unif01() .lt. (1 - (Test_Dru
                           1
Error: Operand of .not. operator at (1) is INTEGER(4)
  

Я знаю, что было бы лучше изменить код с .not.bDropped на (bDropped.eq.0) , но это было бы непросто, потому что это сгенерированный код.

Я пробовал различные -std=xxx флаги, но они не имели никакого значения.

Комментарии:

1. Добро пожаловать в мир строгой типизации! 🙂 Настройте свой генератор кода. Это единственный способ.

2. @kemiisto: Grr… Да, это то, что мне приходится делать.

Ответ №1:

Последняя строка на странице, на которую вы ссылаетесь, гласит

Однако в if-операторах нет неявного преобразования ЦЕЛЫХ значений, [...].

Я бы предположил, что это как-то связано с этим.

Редактировать: Похоже, это не вся правда. Простое выполнение l1 = .not. 0 (когда l1 является логической переменной) выдает ту же ошибку, которую вы получили. Таким образом, в этом случае также нет неявного преобразования.

Комментарии:

1. я думаю, было бы достаточно использовать ==, если вы хотите рассматривать это как логическое значение, например: do while(eof (1) == 0) или что-то в этом роде