У меня есть старый (~ 1995) устаревший код Fortran, который скомпилирован с помощью компилятора g77 и не работает на gfortran.
Проблема в следующих строках (преобразование несовместимых типов, символ в целое число):
INTEGER CKYAN
DATA CKYAN / 'KYAN' /
Переменная CKYAN используется только один раз как триггер:
IF(IWVTX.EQ.CKYAN)THEN
CALL FDCVERTEXSWITCHTOKYAN()
ENDIF
Целое число IWVTX читается из входного файла (строка «KYAN» или какая-либо другая строка).
У меня нет никакого значительного опыта в Fortran, и я не могу найти никакой документации о том, что происходит, когда я инициализирую целочисленную переменную из строки. Я проверил с компилятором g77. Следующий код:
INTEGER it,ita,it1,it2,it3,it4,it5,it6
DATA it / 'KYAN' /
DATA ita / 'KYAN' /
DATA it1 / 'K' /
DATA it2 / 'Y' /
DATA it3 / 'A' /
DATA it4 / 'N' /
DATA it5 / 'O' /
DATA it6 / 'o' /
write(*,*) 'test', it, ita, it1, it2, it3, it4, it5, it6
производит вывод:
1312905547 1312905547 538976331 538976345 538976321 538976334 538976335 538976367
Итак, если строки равны, числа также равны. Если одна буква идет рядом с другой, ее код увеличивается на 1.
Вопросы следующие:
- Что здесь происходит?
- Есть ли функция, которая делает то же самое и доступную gfortran?
- Или есть простой способ исправить это, не трогая другие файлы?
Кто-нибудь может мне помочь с этим? Заранее спасибо.