Iand с различными параметрами вида с использованием новой версии Gfortran - PullRequest
7 голосов
/ 15 января 2020

В настоящее время я работаю со старым кодом, который вызывает функцию iand с целыми числами различных типов в качестве аргументов. Вот небольшой пример того, что включает в себя код:

program test
    integer*1 i
    integer j, k 

    i = 1
    j = 8 

    k = iand(i, j)
    print *, k
end program test

gfortran версии 8 и более ранние имели в качестве расширения возможность вызывать iand с целыми числами различного вида (см., Например, здесь ), тогда как эта опция была удалена в gfortran 9 (см. этот сайт ). Например, с gfortran 7.5.0:

gfortran-7 -o test test.f90 && ./test
       0

Но при компиляции с gfortran 9.2.0 я получаю:

gfortran -o test test.f90
...
Error: Arguments of ‘iand’ have different kind type parameters at (1)

Есть ли опция для новой версии gfortran позволить мне использовать этот код как есть?

1 Ответ

3 голосов
/ 16 января 2020

Нет, нет. Это расширение было удалено, так как семантика не была правильно задана, и исправить код, чтобы он соответствовал стандарту, просто.

См. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81509

В вашем случае что-то вроде

k = iand(int(i, kind(j)), j)

- это то, что вам нужно.

...