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

Согласно this, 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, но они не имели никакого значения.


person Mike Dunlavey    schedule 03.05.2011    source источник
comment
Добро пожаловать в мир сильной типизации! :) Настройте свой генератор кода. Это единственный способ.   -  person Wildcat    schedule 12.05.2011
comment
@kemiisto: Грр... Да, это то, что я должен сделать.   -  person Mike Dunlavey    schedule 12.05.2011


Ответы (1)


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

However, there is no implicit conversion of INTEGER values in if-statements, [...].

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

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

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